コマンド
cp
ファイル・ディレクトリをコピーする
最終更新
UNIX/Linux における cp コマンドは、ファイルやディレクトリをコピーするコマンドである。cp コマンドは古くから存在するため (最初の UNIX である V1 で登場)、あらゆる UNIX/Linux 系 OS で使用可能である。
●cp コマンドの基本的な使い方
ファイルを、別のファイル名でコピーする:
% cp sample1.dat sample2.dat
⇒ sample1.dat を sample2.datにコピー
ファイルを、同じファイル名のまま別のディレクトリにコピーする:
% cp sample1.dat dir/
⇒ sample1.dat をディレクトリ dir/ の下に、同じ名前のままコピー
ファイルを、別のファイル名で別のディレクトリにコピーする:
% cp sample1.dat dir/sample2.dat
⇒ sample1.dat をディレクトリ dir/ の下に、sample2.dat としてコピー
複数のファイルを一括してコピーすることもできる。
% cp sample1.dat sample2.dat sample3.dat dir/
⇒ sample1.dat・sample2.dat・sample3.dat をディレクトリ dir の下にコピー
●オプション
-i コピー先のファイルが存在する場合、上書きしてよいか確認を求める。
操作に慣れていないうちは、
alias cp "cp -i" (csh・tcsh の場合)
alias cp="cp -i" (sh・bash の場合)
を設定しておくとよい。
-f 上書き確認を行わない。
-f オプションはデフォルトだが、alias cp cp -i としている場合に、一時的に alias を無効にする場合に -f オプションを使うと便利。
-p または --preserve
パーミッション・オーナー・グループ・タイムスタンプもそのままコピーする
-R ディレクトリを再帰的にコピーする
ディレクトリ dir1 以下に、ファイル foo・bar があった場合、
は、ディレクトリ dir2 の下にディレクトリ dir1 をコピーする。つまり
- dir2/dir1/foo
- dir2/dir1/bar
というファイルが新たに作成される。一方、
とすると (`/'を付けると)、dir2 の下に dir1 以下のファイル・ディレクトリをコピーする。つまり
というファイルができる。
-r ディレクトリを再帰的にコピーするが、使わない方がよい。理由は後述。
●ファイルを空 (0バイト) にする
cp コマンドを使って、あるファイルを空 (0バイト) にすることができる。/dev/null は常に 0 バイトのファイルなので、下記のようにすることで foo.txt を 0 バイトに切り詰めることができる。なお、foo.txt が存在していなかった場合は、0バイトの foo.txt の新規作成となる。
なお、FreeBSD・Linux いずれも、オンラインマニュアルに「-r オプションは使うな」と書いてある。
●拡張子を変更するコピー
なお、DOS とは違って UNIX では メタキャラクタの展開はシェルの役割なので、
などと、拡張子を変更したファイルのコピーはできない。この場合、csh・tcsh なら foreach、sh・bash なら for を使うとよい。
読み方
cp
(UNIXコマンド) [しー・ぴー] [こぴー]