CP(1)

名称
cp - ファイルをコピーする

書式
cp [ -R [-H | -L | -P]] [-f | -i | -n] [-pv] source_file target_file cp [ -R [-H | -L | -P]] [-f | -i | -n] [-pv] source_file ... target_directory

解説
1 番目の書式の場合、 cp は source_file の内容を target_file にコピーします。 2 番目の書式の場合、 source_file の各々が target_directory の中へコピーされます。このとき 名前は変更されません。 コピー先が元のファイル自身になるような 指定を cp が検出した場合、コピーは失敗します。

以下のオプションが使用できます。

-H  -R オプションが指定されている時、コマンド行で指定されたシンボリックリンク を追跡します。(木構造の検索中に見つかったシンボリックリンクは追跡 しません)

-L  -R オプションが指定されている時、すべてのシンボリックリンクを追跡します。

-P  -R オプションが指定されている時、シンボリックリンクを一切追跡しません。 これがデフォルトです。

-R  source_file としてディレクトリが指定された場合、 cp はそのディレクトリとそれ以下の 部分木を構成するすべてのファイルをコピーします。 source_file が / で終わる場合は、そのディレクトリそのものではなく、 ディレクトリの中身がコピーされます。 シンボリックリンクに ついては、それが指している先のファイルをコピーするのではなく シンボリックリンクのままコピーします。特殊ファイルについても 通常ファイルとしてではなく cp が特殊ファイルを生成することでコピーします。 作成されるディレクトリの属性はプロセスの umask 値の 影響を受けず、対応するコピー元ディレクトリと同じ属性となります。

    ハードリンクされたファイルについては、 cp が別々のファイルとしてコピーすることに注意してください。 ハードリンクを保つためには、代りに tar(1), cpio(1), pax(1) を使ってください。

-f  コピー先にすでに同名のファイルが存在する場合、そのファイルのパー ミッションに関わらず、確認を求めずにそれを消去して新しくファイル を作成します。( -f オプションより前の -i または -n オプションは無視されます。)

-i  すでに存在するファイルへの上書きを伴うコピーを実行する前に、 上書きするかどうかの確認プロンプトを標準エラー出力へ出力するよう cp に指示します。標準入力からの返答が 文字 ‘y’ か ‘Y’ で始まっていればコピーが実行されます。 ( -i オプションより前の -f または -n オプションは無視されます。)

-n  既存のファイルを上書きしません。 ( -n オプションより前の -f または -i オプションは無視されます。)

-p  各ファイルの次の属性パーミッションが許す範囲内で可能な限り保存して コピーするよう cp に指示します: 変更時刻・アクセス時刻・フラグ・モード・ユーザ ID・グループ ID。

    ユーザ ID やグループ ID が保存できない場合でも、エラーメッセージは出力されず 戻り値も変化しません。

    コピー元ファイルに SETUID ビットが立っておりかつそのユーザ ID が保存できない 場合、SETUID ビットは保存されません。コピー元ファイルに SETGID ビットが 立っておりかつそのグループIDが保存できない場合、SETGID ビットは保存されません。 コピー元のファイルに SETUID ビットと SETGID ビットが共に 立っておりかつそのユーザ ID かグループ ID のいずれか一方でも保存できない場合、 -p オプションが指定されていない限り、 SETUID ビットと SETGID ビットの両方が保存されません。

-v  cp を冗長にし、コピーする時ファイルを表示させます。

すでに存在するコピー先ファイルについては、パーミッションが許せば 内容は上書きされますが、モード・ユーザ ID・グループ ID は変化しません。

2 番目の書式では、 source_file としてディレクトリが一つだけ指定されかつ -R オプションが指定されている場合を除き、 target_directory は存在していなければなりません。

コピー先ファイルが存在しない場合、コピー元ファイルのモードに ファイルモード生成マスク (umask, csh(1) を参照) を適用したものがコピー先ファイルのモードとして使用されます。 コピー元ファイルの SETUID ビットが立っていても、コピー元ファイルとコピー先 ファイルの所有者が同一でない限り、それは落とされます。 コピー元ファイルの SETGID ビットが立っていても、コピー元ファイルとコピー先 ファイルが同一グループに属しかつコピーを行うユーザがそのグループ に入っていない限りそれは落とされます。 SETUID ビットと SETGID ビットの両方が立っている場合、上記のすべての 条件が満たされない限り、両方のビットが落とされます。

ファイルの生成および上書きには、適切なパーミッションがなければなりません。

-R フラグが指定されるとシンボリックリンクは追跡されませんが、 そうでない限りデフォルトでシンボリックリンクは常に追跡されます。 -H または -L フラグ ( -R フラグと併用) を用いると、シンボリックリンクの追跡を前述したように動作さ せることができます。 -H, -L, -P オプションは、 -R オプションが指定されていなければ無視されます。 また、これらのオプションは互いに打ち消し合い、 最後に指定されたものが有効になります。

cp が SIGINFO シグナルを受信した場合 ((stty) 1 の status 引数を参照)、 現在の入力および出力のファイルと完了したパーセンテージが、 標準エラー出力へ書かれます。

診断

互換性
従来版の cp には -r オプションがありました。本実装でもこのオプションはサポートされていますが、 特殊ファイル・シンボリックリンク・FIFO などを正しくコピーできないため、 これを使用することは奨められません。

-v および -n は標準ではありませんし、スクリプト中での使用はお勧めしません。

関連項目
mv(1), rcp(1), umask(2), fts(3), symlink(7)

規格
cp コマンドは、 p1003.2 互換を想定しています。

歴史
cp コマンドは AT&T UNIX から登場しました。