Linuxコマンド cp(ファイル・ディレクトリをコピー)
ファイルやディレクトリをコピーをするcpコマンドの解説。
RHEL Fedora CentOS Vine Deblan Ubuntu Plamo
使用方法
ファイルをコピーする場合は、cpコマンドを使用する。一般的にはファイルの所有者やグループ、タイムスタンプ情報は、コマンド実行ユーザや実行時間に変更される。
書式
$ cp [オプション] コピー元ファイル名 コピー先ファイル名
$ cp [オプション] コピー元ファイル名 コピー先ディレクトリ名
オプション
-a, –archive | ファイル構成やアクセス権限を保持してディレクトリを再帰的にコピーする |
-i, –interactive | コピー先に同名のファイルがある場合は、上書きするかを問い合わせる |
-n, –no-clobber | すでに存在するファイルを上書きしない |
-L, –deference | コピー先にあるファイルがシンボリックリンクの場合は、 シンボリックリンク元を上書きする。 |
-P, –no-dereference | シンボリックリンクをシンボリックリンクとしてコピーする |
-p, -preserve | コピー元ファイルのパーミッションやアクセス時間もコピーする |
-r, -R, -recursive | コピー元をディレクトリを再帰的にコピーする。 |
-f, –force | 同名のファイルが存在しても上書きする。 |
-t ディレクトリ名, –target-directory=ディレクトリ名 | コピー先ディレクトリを指定する。 |
-u, –update | コピー先に同一ファイル名がすでに存在し、最終更新時間がコピー元ファイルより 新しい場合は、コピーを実行しない |
-b フラグ, –backup[=フラグ] | コピー先に同一ファイルが既に存在する場合は、ファイル名末尾に「~」をつけた バックアップを作成する。 ※フラグは、指定可能なバックアップ方法の表を参照 |
-S 文字列, –suffix=文字列 | 移動先に同じファイル名がある場合、指定した文字列を バックアップファイル名に付加する。「.」などは勝手に付加されない |
-v, –verbose | 実行中の動作を表示する。 |
フラグ | 説明 |
---|---|
none/off | バックアップを作成しない |
numbered/t | 常に数字の拡張子を持つバックアップを作成する |
existing/nil | 数字つきのバックアップファイルがある場合は加算、ない場合は「~」だけ付加する |
simple/never | 「~」をつけるだけのバックアップを行う |
サンプル
sample1.txtをsample2.txtとしてコピーする。
cp sample1.txt sample2.txt
既存ファイルをバックアップして移動する
移動先に同名のファイルが存在する場合は、バックアップファイルを作成して移動する方法。バックアップファイルにはファイル名の末尾にチルダ(~)が付加される。
サンプル
ファイル名sample1.txtをディレクトリのdirに移動させる。
$ cp -b sample1.txt dir
複数のファイルをコピーする(ワイルドカード)
ワイルドカードもしくは、xargsコマンドを使用して複数のファイルを移動する。
サンプル:*を使用する場合
$ cp * ../
sample1.txt~sample3.txtのファイルを上位のディレクトリをすべてコピーする。なお、ディレクトリが含まれている場合は「*」を使用した場合エラーが発生する。
サンプル:xargsを使用する場合
コマンドライン制限文字数を超えた場合は、以下のxargsコマンドを使用する。
$ ls | xargs cp -t ../
属性を保持したままファイル・ディレクトリをコピーする
ファイル構成やアクセス権限を維持してディレクトリを再帰的にコピーする。
サンプル
/home/testディレクトリ内をパーミッションやオーナー、グループなどの属性をそのまま維持しtmp/backupディレクトリへコピーする。
$ cp -a sample1.txt dir
コピー先をコピー元のシンボリックリンクにする
シンボリックリンクとしてコピーする。
サンプル
dir内のsample1.txtのシンボリックリンクとしてsample1にコピーする。
$ cp -s dir/sample1.txt sample1
ディレクトリを再帰的にコピーする。
ディレクトリの中にあるディレクトリごとコピーするには、「-R」また「-r」オプションを使用します。
サンプル
dir内のファイル及びディレクトリ構造を含めて、dir3配下に再帰的にコピーする。
$ cp -r dir/sample1.txt sample1