今回はlinuxコマンドの一つであるcpコマンドについてまとめていきます。
ファイルやディレクトリをコピーするcpコマンドの基本
通常のコピー
cpコマンドはcopyの略で、そのままファイルをコピーするためのコマンドです。基本的な書式は次のようになります。
$ cp コピー元 コピー先
例えば次のような形です。
$ cp fileA.txt fileA_copy.txt
もちろん別のディレクトリにもコピーはできます。次の例はdirディレクトリにコピー先を指定しています。
$ cp fileA.txt dir/fileA_copy.txt
ファイル名をそのままにコピー
ファイル名を変更せず同じ名前としてコピーする場合、コピー先にはディレクトリ名を書くだけで良いです。
$ cp コピー元 コピー先のディレクトリ名
これだけでコピーができます。次のような形です。dirディレクトリの中にfileA.txtをコピーしています。
$ cp fileA.txt dir
複数ファイルをコピー
複数ファイルに同時にコピーすることもできます。上と同じようにファイル名を同じにして、ディレクトリに保存します。
$ cp コピー元その1 コピー元その2 コピー先のディレクトリ名
$ cp fileA.txt fileB dir
ワイルドカードでコピー
ワイルドカードを使って一度にコピーすることもできます。次のような形です。
$ cp file* ディレクトリ名
こちらも意外によく使えます。
cpコマンドの便利なオプション
cpコマンドのオプション一覧
-a | 元ファイルの属性とディレクトリの構成を保持してコピーする。可能な限り。 |
-b | 上書きされるファイルのバックアップを作成する |
-d | シンボリックリンクをコピーする時は実体をコピーする |
-f | コピー先に同じ名前のファイルがあっても警告なしで上書きをする。 |
-i | 上書きされるファイルがある場合、確認が入る。 |
-l | ハードリンクを作成する |
-P | ディレクトリをつけてコピーする |
-p | 元のファイルのオーナー、グループ、パーミション、タイムスタンプを保持 |
-r | ディレクトリごとコピーする(再帰的) |
-s | シンボリックリンクを作成する |
-u | 保存先が同じファイル名のファイルだったとき、タイムスタンプを確認して、新しいor同じだったときコピーしない。 |
-v | コピーの詳細情報を表示 |
-r オプション:ディレクトリごとコピー
cpコマンドの中で、もっともよく使うオプションが、この「-r」オプションです。
-rオプションをつけることにより、ディレクトリごとコピーすることができます。ディレクトリの中のファイルもコピーの対象です。
$ cp -r コピー元ディレクトリ コピー先ディレクトリ
-fオプション:強制的にコピー
ディストリビューションごとに違うのだが、コピー先に同じ名前のファイルがある場合に確認が入ることがあります。
いちいちそれに答えるのが面倒な場合、使えるのが「-f」コマンドです。forceの名の下に、強制的に上書きをします。
-iオプション:上書きになるときは要確認
-fオプションとは反対に、上書きになるかを確認したいときもあります。大事なファイルを扱っているときには、上書きは致命傷になります。
$ cp -i ファイル元 コピー後
で「yes or no」の確認が出ます。
最近のディストリビューションではこちらがデフォルトになっていることもあります。
-bオプション(–backup):上書き時にバックアップファイルを作成
大事なファイル群を扱っているとき、上書きをするのはやはり怖いので、その際に使えるのが「-b」オプションです。
-bオプションを利用すると、cpコマンドを実行すると同時にバックアップファイルを作ってくれます。
最後に、「~」がついたファイルがバックアップされたファイルです。
バックアップ時に後ろにつける文字列は「~」だけではなく、指定することも可能です。–suffixオプションを使います。
$ cp -b --suffix=_$(date +%Y%m%d) コピー元 コピー先
とすると、「_20180129」というように今日の日付を後ろにつけることができます。バックアップとしてはこちらの方がわかりやすくていいです。
また、numberedなどを利用すると、番号をつけることもできます。
-sオプション(–symbolic-link):シンボリックリンクの作成
通常シンボリックリンクを作成する時は、lnコマンドを使って
$ ln -s 元ファイル シンボリックリンク
と書きます。実はcpコマンドでもこれができます。
$ cp -s 元ファイル シンボリックリンク
-lオプション:ハードリンクを作成
同じように「-l」オプションを利用すると、ハードリンクが作成できます。「ls -il」コマンドで確認すると、i-nodeが同じことを確認できます。
-vオプション:コピーの情報を表示
-vオプションを利用すると、何がコピーされたかの情報を表示してくれます。ワイルドカードを使ったときなど、付けておくと便利です。
-Pオプション(–parents):ディレクトリ構造ごとコピーする
通常のcpコマンドではサブディレクトリも含めた状態でコピーすることはできません。そういうときには「-P」オプションを利用します。
下記の例でオプションなしで実行すると、普通はfileC.txtがdirディレクトリに入るだけになります。–parentsオプションを使うことで、ディレクトリ構造をそのままコピーできているのがわかります。
CPコマンドと類似のコマンド群
最後に、cpと似ているコマンドもご紹介します。
mvコマンド
moveで移動のコマンド。名前を変えるときにも使います。cpと同じくファイル、ディレクトリに関する重要コマンドです。
rsync
高速なファイルの同期やバックアップに使うコマンドです。コピー元とコピー先で差分(違いのみ)をコピーできる点でcpよりも早く動きます。
本番サーバーへの移行やバックアップに使われることが多いです。
install
ファイルをコピーし、その属性を設定するinstallコマンドというものもあります。インストール作業に便利なコマンドで、設定時などに使えます。
以上がlinuxコマンドのcpコマンドのまとめでした。