11.1 cp: ファイルとディレクトリのコピー
cpは,ファイル(または,オプションでディレクトリ)をコピーしま
す.コピーはオリジナルから完全に独立しています.一つのファイルをもう一
つにコピーする,または,任意の多くのファイルをコピー先のディレクトリに
コピーすることのいずれかが可能です.概要です.
cp [option]... source dest
cp [option]... source... directory
最後の引数が既存のディレクトリを指す場合,cpはそれぞれの
sourceファイルをそのディレクトリに(同じ名前のままで)コピーします.
それ以外で,二つのファイルが与えられた場合,最初のものを二番目のものに
コピーします.最後の引数がディレクトリでなく,二つ以上のオプションでな
い引数が与えられた場合エラーとなります.
一般的に,ファイルは読み込まれたとおりに書き込まれます.例外は,以下の
--sparseオプションを参照してください.
デフォルトで,cpはディレクトリをコピーしません.しかし,
-R,-a,そして-rオプションでは,
cpは元のディレクトリを下り,対応するコピー先のディレクトリに
ファイルをコピーすることで,再帰的にコピーします.
デフォルトで,cpは再帰的にコピーしないときのみ,シンボリック
リンクをたどります.このデフォルトは,--no-dereference
(-d),--dereference (-L),そして-H
オプションで優先することが可能です.これらのオプションの一つ以上が指定
されている場合,最後のものが他のものに対して,そのまま優先します.
デフォルトで,cpは,再帰的なコピーではないときだけ特殊ファイ
ルの内容をコピーします.このデフォルトは,--copy-contentsオプ
ションで優先させることが可能です.
cpは一般的に,以下の例外はありますが,ファイルの自分自身への
コピーを拒絶します.--force --backupが同一のsourceと
destで指定され,通常のファイルを参照している場合,cpは,
通常の方法(see Backup options)で指定されたように,通常または番号付
きのバックアップファイルを作成します.これは,変更前に既存のファイルの
バックアップを単に作成したいとき役に立ちます.
プログラムは以下のオプションも受け入れます.Common optionsも参照
してください.
- ‘-a’
- ‘--archive’
-
コピー時に,元のファイルの構造と属性を可能な限り保持します(しかし,ディ
レクトリ構造の保持は試みません.すなわち,‘ls -U’はコピーされてい
るディレクトリの項目を,異なる順序でリストアップする可能性があります).
-dpRと同じです.
- ‘-b’
- ‘--backup[=method]’
-
See Backup options. 上書きされたり削除されたりするそれぞれのファイ
ルのバックアップを作成します.特殊な場合として,強制とバックアップのオ
プションが指定され,sourceとdestが同じ名前で存在していると
き,通常のファイルとして,cpはsourceのバックアップを作
成します.このオプションの組合わせの役に立つ応用の一つは,以下の小さな
Bourneシェルスクリプトです.
#!/bin/sh
# Usage: backup FILE...
# Create a gnu-style backup of each listed FILE.
for i; do
cp --backup --force "$i" "$i"
done
- ‘--copy-contents’
-
再帰的にコピーをしている場合,特殊ファイル(例えばFIFOとデバイスファイ
ル)の内容を通常のファイルのようにコピーします.これは,それぞれのソー
スファイルからデータを読み込み,それをコピー先に書き込むことを意味しま
す.通常は,FIFOと/devディレクトリで見つかるような特殊ファイル
では好ましくない効果があるので,このオプションの使い方はよく誤解されま
す.ほとんどの状況で,FIFOと/dev/consoleのような特殊ファイルを
読み込もうとして
cp -R --copy-contents
は限りなく読み込み続け,
/dev/zeroをコピーで使用している場合,コピー先のディスクはいっぱ
いになるでしょう.このオプションは,再帰的にコピーしていない限り効果が
無く,シンボリックリンクのコピーにも影響しません.
- ‘-d’
-
シンボリックリンクを,それが示すファイルをコピーするのではなく,シンボ
リックリンクとしてコピーし,コピーのソースファイル間のハードリンクを保
持します.--no-dereference --preserve=linksと等価です.
- ‘-f’
- ‘--force’
-
このオプションを使用せずコピーし,コピー先のファイルが存在し,書き込み
で開くことができないとき,コピーは失敗します.しかし,--force
を用いた場合,コピー先のファイルが開けないとき,cpはそれをア
ンリンクし,もう一度開こうとします.この動作は,--linkと
--symbolic-linkでそれを可能にすることとは異なり,それによって
コピー先ファイルは開かれることなく,無条件にアンリンクされます.
--remove-destinationの記述も参照してください.
- ‘-H’
-
コマンドライン引数がシンボリックリンクを指定している場合,シンボリック
リンクではなく,ファイルをその位置にコピーします.しかし,再帰的にたどっ
ていて見つかったすべてのシンボリックリンクを(その元を保存して)コピーし
ます.
- ‘-i’
- ‘--interactive’
-
既存の通常のコピー先のファイルを上書きするかどうか,プロンプトを表示し
ます.
- ‘-l’
- ‘--link’
-
ディレクトリ以外はコピーの代わりにハードリンクを作成します.
- ‘-L’
- ‘--dereference’
-
常にシンボリックリンクをたどります.
- ‘-P’
- ‘--no-dereference’
-
シンボリックリンクを,それが示すファイルをコピーするのではなくシンボリッ
クリンクとしてコピーします.
- ‘-p’
- ‘--preserve[=attribute_list]’
-
指定されている元のファイルの属性を保持します.指定する場合,
attribute_listは以下の文字列の一つ以上を,カンマで分離されたリス
トにする必要があります.
- ‘mode’
-
許可の属性を保持します.
- ‘ownership’
-
所有者とグループの属性を保持します.最近のシステムでは,スーパーユーザ
のみファイルの所有者を変更することが可能で,通常のユーザは,要求される
グループのメンバーの場合のみ,ファイルの所有者のグループを保持すること
が可能です.
- ‘timestamps’
-
最後のアクセスと最後の編集のタイムスタンプを保持します.
- ‘links’
-
対応するソースファイル間のリンクをコピー先のファイルに保持します.
- ‘all’
-
すべてのファイル属性を保持します.上記のすべてを指定したものと等価です.
attribute_listを用いずに--preserveを使用することは,
--preserve=mode,ownership,timestampsと等価です.
このオプションがないとき,それぞれのコピー先のファイルは,元のファイル
に対応するパーミッションで作成され,umaskで設定されているビットがなく
なり,そして,set-user-idビットとset-group-idビットがなくなります.
See File permissions.
- ‘--no-preserve=attribute_list’
-
指定された属性を保持しません.attribute_listは
--preserveの形式と同じです.
- ‘--parents’
-
それぞれのコピー先のファイル名を,ターゲットディレクトリにスラッシュと
指定されたソースファイルの名前を追加したものとして作成します.
cpに与える最後の引数は,既存のディレクトリ名にする必要があり
ます.例えば,以下のようなコマンドを入力します.
cp --parents a/b/c existing_dir
これはファイルa/b/cをexisting_dir/a/b/cにコピーし,存在
しないあらゆる中間ディレクトリを作成します.
- ‘--reply[=how]’
-
--reply=yesを使用すると,コピー先のファイルに関するすべてのプ
ロンプトに対する応答として‘yes’が与えられたかのようにcp
が動作します.それは,それまでに使用されていた--interactiveや
-iオプションを効果的に停止します.コピー先のファイルに関する
すべてのプロンプトに対する応答として‘no’が与えられたかのように
cpに動作させるため,--reply=noを指定して下さい.そ
れぞれ既存のコピー先のファイルに関して,cpがユーザにプロンプ
トを表示するようにするため,--reply=queryを指定して下さい.
- ‘-R’
- ‘-r’
- ‘--recursive’
-
再帰的にディレクトリをコピーします.デフォルトではシンボリックリンクを
たどりません.--archive (-a),-d,
--dereference (-L),--no-dereference
(-P),そして-Hオプションを参照して下さい.特殊ファイ
ルは,元となるファイルと同じ形式でコピー先のファイルを作成することでコ
ピーします.--copy-contentsオプションを参照して下さい.シンボ
リックリンクや特殊ファイルをコピーするために-rを使用すること
には移植性がありません.gnu以外のシステムには,歴史的な理由から
-rで-Lと--copy-contentsの等価物を暗黙に指定
するものもあります.また,シンボリックリンクをコピーするため
-Rを使用することは,-Pも指定しない限り移植性が無く,
それは,デフォルトでシンボリックリンクの間接参照を行なう実装が
POSIXで許可されているためです.
- ‘--remove-destination’
-
それぞれの既存のコピー先ファイルを,それを開く前に削除します(上記の
-fとは異なります).
- ‘--sparse=when’
-
まばらなファイル(sparse file)は穴(holes) — 物理的なディ
スクブロックには発生しないゼロバイトの列 — を含みます.‘read’シ
ステムコールはこれらをゼロとして読み込みます.バイナリファイルには連続
するゼロバイトを含むことが多いので,これでディスクスペースの節約と速度
の増加の両方を達成することが可能です.デフォルトでは,cpは発
見的手法を用いて入力された元ファイルの穴を見付け,対応する出力ファイル
に同様にまばらにします.通常のファイルだけがまばらになります.
whenの値は以下の一つになります.
- ‘auto’
-
デフォルトの動作です:入力ファイルがまばらの場合,出力ファイルもまばら
にするように試みます.しかし,出力ファイルが存在し,通常のファイルでは
ないものを参照している場合,まばらにする試みは行ないません.
- ‘always’
-
入力ファイルの十分に長いゼロバイトの連続に対し,入力ファイルがまばらで
ない場合でも,出力ファイルに対応する穴(連続したゼロバイト)の作成を試み
ます.これは,入力ファイルがまばらなファイルをサポートしていないファイ
ルシステム(例えば,SGI IRIX 5.3とそれ以前の‘efs’ファイルシステム)
に存在していて,出力ファイルがサポートしているファイルシステムのとき役
に立ちます.穴(連続したゼロバイト)は通常のファイルにだけ作成されるので,
コピー先のファイルが通常のファイルではない場合,cpはまばらに
しようとはしません.
- ‘never’
-
出力ファイルをまばらにしません.mkswapコマンドを用いてファイ
ルを作成するとき,そのようなファイルには穴があってはならないので,これ
が役に立ちます.
- ‘--strip-trailing-slashes’
-
それぞれのsource引数から,後置されるスラッシュを削除します.
See Trailing slashes.
- ‘-s’
- ‘--symbolic-link’
-
ディレクトリでないものをコピーする代わりにシンボリックリンクを作成しま
す.すべての元ファイル名は,リンク先のファイルが現在のディレクトリにあ
る場合以外,絶対的である(‘/’で始まる)必要があります.シンボリック
リンクをサポートしないシステムでは,このオプションは結果としてエラーメッ
セージを返すだけです.
- ‘-S suffix’
- ‘--suffix=suffix’
-
-bで作成されるそれぞれのバックアップファイル名に,
suffixを追加します.See Backup options.
- ‘--target-directory=directory’
-
移動(コピー)先のdirectoryを指定します.See Target directory.
- ‘-v’
- ‘--verbose’
-
コピーする前にそれぞれのファイル名を出力します.
- ‘-V method’
- ‘--version-control=method’
-
-bで作成するバックアップの形式を変更します.method引数
は,‘none’ (または‘off’),‘numbered’ (または‘t’),
‘existing’ (または‘nil’),または‘never’ (または
‘simple’)が利用可能です.See Backup options.
- ‘-x’
- ‘--one-file-system’
-
コピーを開始したファイルシステムと異なるサブディレクトリを省略します.
しかし,マウントポイントのディレクトリはコピーされます.
終了ステータスのゼロは成功を示し,ゼロ以外の値は失敗を示します.