UNIX/Linuxの部屋 コマンド:cp

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド 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 があった場合、
% cp -R dir1 dir2
は、ディレクトリ dir2 の下にディレクトリ dir1 をコピーする。つまり
  • dir2/dir1/foo
  • dir2/dir1/bar
というファイルが新たに作成される。一方、
% cp -R dir1/ dir2
とすると (`/'を付けると)、dir2 の下に dir1 以下のファイル・ディレクトリをコピーする。つまり
  • dir2/foo
  • dir2/bar
というファイルができる。
-r ディレクトリを再帰的にコピーするが、使わない方がよい。理由は後述。

ファイルを空 (0バイト) にする
cp コマンドを使って、あるファイルを空 (0バイト) にすることができる。/dev/null は常に 0 バイトのファイルなので、下記のようにすることで foo.txt を 0 バイトに切り詰めることができる。なお、foo.txt が存在していなかった場合は、0バイトの foo.txt の新規作成となる。
% cp /dev/null foo.txt

注意: cp -r でコピーすると、シンボリックリンクが通常のファイルに変わってしまう 【2019/01/09追加】
cp -r でディレクトリを再帰的にコピーするが、シンボリックリンクを通常のファイルとしてコピーしてしまうので、使わない方がよい。かわりに -R オプションを使うことで、シンボリックリンクをシンボリックリンクのままコピーしてくれる。

なお、FreeBSD・Linux いずれも、オンラインマニュアルに「-r オプションは使うな」と書いてある。

拡張子を変更するコピー
なお、DOS とは違って UNIX では メタキャラクタの展開はシェルの役割なので、
% cp *.txt *.txt.bak
などと、拡張子を変更したファイルのコピーはできない。この場合、csh・tcsh なら foreach、sh・bash なら for を使うとよい。
>> Solaris10オンラインマニュアル(man) Solaris10 cp(1)
>> Linuxオンラインマニュアル(man) Linux cp(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD cp(1)

読み方 cp (UNIXコマンド) [しー・ぴー] [こぴー] このエントリーをはてなブックマークに追加

"CoPy" の略。