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
実行結果
実行結果