Cp (UNIX)

cpはUNIXのシェル上で入力するコマンドの一種で、ファイルをある場所から別の場所へコピーする。異なるファイルシステム間でもコピーできる。元のファイルはそのまま残り、新しいファイルは同じ名前の場合もあるし、別の名前をつけることもできる。

本項目ではPOSIXに定められている仕様を解説する。多くのLinuxシステムで使用しているGNU Core Utilitiesのcpには追加のオプションがあるcp: Copy files and directories GNU Coreutils。

 使用法 
1つのファイルを別のファイルにコピーする。
 cp [ -f ] [ -H ] [ -i ] [ -p ][ -- ] SourceFile TargetFile

ファイルをディレクトリにコピーする。
 cp [ -f ] [ -H ] [ -i ] [ -p ] [ -r | -R ] [ -- ] SourceFile ... TargetDirectory

ディレクトリを別のディレクトリにコピーする。
 cp [ -f ] [ -H ] [ -i ] [ -p ] [ -- ] { -r | -R } SourceDirectory ... TargetDirectory

 フラグ 
-f (force) – コピー先に既にファイルがあり、書き込み用のオープンに失敗すると削除を試みる。削除はそのコマンドでのコピーに先駆けて行われる。
-i (interactive) – コピー先に既にファイルがある場合、ユーザーに上書きしてよいか尋ねる。y と入力するとコピーを続行する。それ以外では上書きを行わない。
-p (preserve) – SourceFile/SourceDirectory の以下の属性を対応する TargetFile/TargetDirectory にも設定する。
最新更新時刻と最新アクセス時刻
所有者のユーザIDとグループID（設定可能なパーミッションである場合）
ファイルパーミッション（SUIDおよびSGIDビットを含む）
-R (recursive) – ディレクトリを再帰的にコピーする。

 使用例 
カレントディレクトリにある1つのファイルを同じディレクトリ内にコピーする。
     cp prog.c prog.bak
これにより、prog.c を prog.bak にコピーする。prog.bak が存在していなかった場合、cpコマンドがそれを生成する。既に存在していた場合、中身を prog.c のコピーに上書きする。

カレントディレクトリにある1つのファイルを別のディレクトリ配下にコピーする。
     cp jones /home/nick/clients
これにより、jones というファイルが /home/nick/clients/jones にコピーされる。

1つのファイルをコピーする際に、更新時刻や対応するアクセス制御リストを保持する。
     cp -p smith smith.jr
これにより、smith から smith.jr にコピーする。そして、コピーしたときのタイムスタンプではなく、元のファイルと同じ更新時刻を保持させる。また、ファイルパーミッションも全く同じになる。

あるディレクトリ配下の全ファイルを新たなディレクトリにコピーする。
     cp /home/janet/clients/* /home/nick/customers
これにより /home/janet/clients ディレクトリにあるファイルのみを /home/nick/customers ディレクトリにコピーする。

サブディレクトリも含めあるディレクトリの配下全部を別のディレクトリにコピーする。
     cp -R /home/nick/clients /home/nick/customers
この場合、/home/nick/clients 配下のサブディレクトリも含めた全てが /home/nick/customers/clients ディレクトリにコピーされる。

複数のファイルを指定して別のディレクトリにコピーする。
     cp jones lewis smith /home/nick/clients
jones、lewis、smith というファイルが /home/nick/clients ディレクトリにコピーされる。

パターンマッチングを使い、特定のファイルをコピーする。
     cp programs/*.c .
programs ディレクトリにある、末尾に ".c" のつくファイルをカレントディレクトリにコピーする。最後のドットがカレントディレクトリを表すことに注意（その前に必ず空白が必要）。

 関連コマンド 
cpio – ディレクトリ構造全体をある場所から別の場所へコピーする。
mv – ファイルまたはディレクトリの移動
rm – ファイルまたはディレクトリの削除
uucp – unix to unix copy
scp – SSH上のセキュアなコピー

 脚注 

 外部リンク 

Category:標準UNIXプログラム