cpコマンドはファイルをコピーするコマンドです。
Linuxコマンドの中でとても基本的なコマンドのひとつで、よく使用されるコマンドです。
目次
- 1 cpコマンドの利用例
- 1.1 ファイルをコピー (オプションなし)
- 1.2 ディレクトリをコピー (-Rオプションまたは-rオプション)
- 1.3 ディレクトリ関係 (-tオプションと-Tオプション)
- 1.4 属性の保持 (-pオプション)
- 1.5 対話モード (-iオプション)
- 1.6 強制的にコピー (-fオプション)
- 1.7 コピーするファイルを表示 (-vオプション)
- 1.8 ファイルの親ディレクトリを作成してコピー (--parentsオプション)
- 1.9 存在するファイルを上書きしない (-nオプション)
- 1.10 ファイルの更新 (-uオプション)
- 1.11 ハードリンクの作成 (-lオプション)
- 1.12 シンボリックリンクの作成 (-sオプション)
- 1.13 シンボリックリンクファイル関係 (-Lオプションと-Pオプションと-Hオプションと-dオプション)
- 1.14 可能な限り構造を維持してコピー (-aオプション)
- 1.15 バックアップ (-bオプション)
- 2 参考
cpコマンドの利用例
ファイルをコピー
(オプションなし)
cpコマンドは、ファイルをコピーするコマンドです。cpコマンドには以下の構文が利用できます。
1 |
cp [option]… source dest |
sourceはコピー元のファイルで、destはコピー先のファイルになります。
コマンド例
1 |
cp file.txt copyfile.txt |
コマンド例実行前
1 2 |
$ls file.txt |
実行結果
1 2 |
$ls copyfile.txt file.txt |
また、ファイルをあるディレクトリにコピーする場合は以下の構文も利用できます。
1 |
cp [option]… source… directory |
または
1 |
cp [option]… -t directory source… |
この構文はファイルを別のディレクトリにコピーする場合に利用できます。ファイル名はコピー元のファイル名がコピー先のファイルにそのまま使われます。
コマンド例は、カレントディレクトリにあるすべてのtxtファイルをdirという名前のディレクトリにコピーします。
コマンド例
1 |
cp *.txt dir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 |
$ls -lR .: 合計 4 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 20:09 dir -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 20:09 file.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 20:09 file2.txt ./dir: 合計 0 |
実行結果
1 2 3 4 5 6 7 8 9 10 11 |
$ls -lR .: 合計 4 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 20:10 dir -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 20:09 file.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 20:09 file2.txt ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 20:10 file.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 20:10 file2.txt |
ディレクトリをコピー
(-Rオプションまたは-rオプション)
-Rオプションまたは-rオプションは、再帰的にディレクトリをコピーします。
コマンド例
1 |
cp -r dir copydir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 |
$ls -lR .: 合計 4 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 12:46 dir ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:46 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 18 12:46 file_sym.txt -> file.txt |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ls -lR .: 合計 8 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 12:48 copydir drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 12:46 dir ./copydir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:48 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 18 12:48 file_sym.txt -> file.txt ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:46 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 18 12:46 file_sym.txt -> file.txt |
コピー先のディレクトリが既に存在する場合は-Tオプションを用います。(コピー先のディレクトリの中にコピー元の指定したディレクトリをそのままコピーする場合は-Tオプションは必要ありません)
コマンド例
1 |
cp -r -T dir copydir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ls -lR .: 合計 8 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 12:50 copydir drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 12:46 dir ./copydir: 合計 0 ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:46 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 18 12:46 file_sym.txt -> file.txt |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ls -lR .: 合計 8 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 12:56 copydir drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 12:46 dir ./copydir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:56 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 18 12:56 file_sym.txt -> file.txt ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:46 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 18 12:46 file_sym.txt -> file.txt |
ディレクトリ関係
(-tオプションと-Tオプション)
cpコマンドは構文として最後の宛先ファイルにディレクトリまたはディレクトリのシンボリックファイルを指定すると最後の引数を特別に扱います。
1 |
cp [option]... source... directory |
どのように扱うかというとdirという名前のディレクトリが存在するときに
1 |
cp file.txt dir |
は以下のコマンドと等価になります。
1 |
cp file.txt dir/file.txt |
このディレクトリの指定は-tオプションで行うこともできます。
1 |
cp [option]... -t directory source... |
コマンド例
1 |
cp -t dir file.txt |
コマンド例実行前
1 2 3 4 5 6 |
$tree . ├── dir └── file.txt 1 directory, 1 file |
実行結果
1 2 3 4 5 6 7 |
$tree . ├── dir │ └── file.txt └── file.txt 1 directory, 2 files |
-Tオプションを用いると最後の引数がディレクトリの場合、特別に扱わないようにできます。例えば、ディレクトリをコピーするとき、-Tオプションをつけない場合のコピーは以下のようになります。
コマンド例
1 |
cp -r dir copydir |
コマンド例実行前
1 2 3 4 5 6 7 |
$tree . ├── copydir └── dir └── file.txt 2 directories, 1 file |
実行結果
1 2 3 4 5 6 7 |
$tree . ├── copydir │ └── dir │ └── file.txt └── dir └── file.txt |
コピー先のディレクトリの中にコピー元のディレクトリがコピーされます。-Tオプションを用いた場合は以下のようになります。
コマンド例
1 |
cp -T -r dir copydir |
コマンド例実行前
1 2 3 4 5 6 7 |
$tree . ├── copydir └── dir └── file.txt 2 directories, 1 file |
実行結果
1 2 3 4 5 6 7 8 |
$tree . ├── copydir │ └── file.txt └── dir └── file.txt 2 directories, 2 files |
この場合は、コピー元のディレクトリの内容がコピー先のディレクトリにコピーされます。
また、-Tオプションはディレクトリのシンボリックファイルをコピーするときに利用できます。
コマンド例
1 |
cp -T -P dir_sym2 dir_sym |
コマンド例実行前
1 2 3 4 5 6 7 |
$tree . ├── dir ├── dir_sym -> dir └── dir_sym2 -> /home/ubuntu/test_cp/test/dir 3 directories, 0 files |
実行結果
1 2 3 4 5 6 7 |
$tree . ├── dir ├── dir_sym -> /home/ubuntu/test_cp/test/dir └── dir_sym2 -> /home/ubuntu/test_cp/test/dir 3 directories, 0 files |
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$tree . ├── dir ├── dir_sym -> dir └── dir_sym2 -> /home/ubuntu/test_cp/test/dir 3 directories, 0 files $ $cp -P dir_sym2 dir_sym $tree . ├── dir │ └── dir_sym2 -> /home/ubuntu/test_cp/test/dir ├── dir_sym -> dir └── dir_sym2 -> /home/ubuntu/test_cp/test/dir 4 directories, 0 files |
属性の保持
(-pオプション)
-p(--preserve)オプションは、ファイル属性を保持するオプションです。
-pオプションではなく、--preserveオプションを用いると以下の属性リストを指定することができます(複数の場合はコンマ区切りで指定)。-pオプションの場合は、mode、ownership、timestampsが指定された状態となり、これらが何も指定しない場合のデフォルトになります。
また、保存しない属性を指定する場合は--no-preserveオプションを利用できます。
属性リストの種類
属性リスト | 意味 |
mode | アクセス権の保持 |
ownership | 所有者とグループの情報を保持 |
timestamps | 最終アクセス時間(atime)と最終修正時間(mtime)の保持 |
links | 複数のファイルをコピーするときファイル間のリンクを保持 シンボリックリンクはハードリンクに変換 |
context | SELinuxのコンテキストを保持 |
xattr | 拡張ファイル属性を保持 |
all | すべての属性リストを指定 |
デフォルト
デフォルトは、アクセス権の保持(mode)、所有者とグループの保持(ownership)、タイムスタンプの保持(timestamps)になります。
また、所有者とグループの保持には適切な権限を持っている必要があります。
コマンド例
1 |
sudo cp -p file.txt copyfile.txt |
コマンド例実行前
1 2 3 |
$ls -l 合計 0 -rwxrwxrwx 1 owner group 0 10月 16 10:31 file.txt |
実行結果
1 2 3 4 |
$ls -l 合計 0 -rwxrwxrwx 1 owner group 0 10月 16 10:31 copyfile.txt -rwxrwxrwx 1 owner group 0 10月 16 10:31 file.txt |
コマンド例と実行結果(権限がない場合)
1 2 3 4 5 6 7 8 9 |
$ls -l 合計 0 -rwxrwxrwx 1 owner group 0 10月 16 10:31 file.txt $ $cp -p file.txt copyfile.txt $ls -l 合計 0 -rwxrwxrwx 1 ubuntu ubuntu 0 10月 16 10:31 copyfile.txt -rwxrwxrwx 1 owner group 0 10月 16 10:31 file.txt |
アクセス権の保持
コマンド例
1 |
cp --preserve=mode file.txt copyfile.txt |
コマンド例実行前
1 2 3 |
$ls -l 合計 0 -rwxrwxrwx 1 ubuntu ubuntu 0 10月 16 10:24 file.txt |
実行結果
1 2 3 4 |
$ls -l 合計 0 -rwxrwxrwx 1 ubuntu ubuntu 0 10月 16 10:27 copyfile.txt -rwxrwxrwx 1 ubuntu ubuntu 0 10月 16 10:24 file.txt |
所有者とグループの保持
所有者とグループの保持には適切な権限を持っている必要があります。
コマンド例
1 |
sudo cp --preserve=ownership file.txt copyfile.txt |
コマンド例実行前
1 2 3 |
$ls -l 合計 0 -rwxrwxrwx 1 owner group 0 10月 16 10:31 file.txt |
実行結果
1 2 3 4 |
$ls -l 合計 0 -rwxrwxrwx 1 owner group 0 10月 16 10:37 copyfile.txt -rwxrwxrwx 1 owner group 0 10月 16 10:31 file.txt |
タイムスタンプの保持
コマンド例
1 |
cp --preserve=timestamps file.txt copyfile.txt |
コマンド例実行前
1 2 3 |
$ls --full-time 合計 0 -rwxrwxrwx 1 ubuntu ubuntu 0 2017-10-16 10:51:45.452750001 +0900 file.txt |
実行結果
1 2 3 4 |
$ls --full-time 合計 0 -rwxrwxr-x 1 ubuntu ubuntu 0 2017-10-16 10:51:45.452750001 +0900 copyfile.txt -rwxrwxrwx 1 ubuntu ubuntu 0 2017-10-16 10:51:45.452750001 +0900 file.txt |
リンクの保持
複数のファイルをコピーするとき、ファイル間のリンクが保持されます。シンボリックリンクはハードリンクに変換されます。
コマンド例
1 |
cp --preserve=links file* dir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 10 |
$ls -ilR .: 合計 4 13370852 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 16 10:56 dir 13370850 -rwxrwxrwx 2 ubuntu ubuntu 0 10月 16 10:51 file.txt 13370850 -rwxrwxrwx 2 ubuntu ubuntu 0 10月 16 10:51 file_hardlink.txt 13370851 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 16 10:55 file_symlink.txt -> file.txt ./dir: 合計 0 |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ls -ilR .: 合計 4 13370852 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 16 11:04 dir 13370850 -rwxrwxrwx 2 ubuntu ubuntu 0 10月 16 10:51 file.txt 13370850 -rwxrwxrwx 2 ubuntu ubuntu 0 10月 16 10:51 file_hardlink.txt 13370851 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 16 10:55 file_symlink.txt -> file.txt ./dir: 合計 0 13370853 -rwxrwxr-x 3 ubuntu ubuntu 0 10月 16 11:04 file.txt 13370853 -rwxrwxr-x 3 ubuntu ubuntu 0 10月 16 11:04 file_hardlink.txt 13370853 -rwxrwxr-x 3 ubuntu ubuntu 0 10月 16 11:04 file_symlink.txt |
コマンド例と実行結果(シンボリックリンクをたどらない場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$cp -P --preserve=links file* dir $ls -ilR .: 合計 4 13370852 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 16 11:06 dir 13370850 -rwxrwxrwx 2 ubuntu ubuntu 0 10月 16 10:51 file.txt 13370850 -rwxrwxrwx 2 ubuntu ubuntu 0 10月 16 10:51 file_hardlink.txt 13370851 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 16 10:55 file_symlink.txt -> file.txt ./dir: 合計 0 13370853 -rwxrwxr-x 2 ubuntu ubuntu 0 10月 16 11:06 file.txt 13370853 -rwxrwxr-x 2 ubuntu ubuntu 0 10月 16 11:06 file_hardlink.txt 13370854 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 16 11:06 file_symlink.txt -> file.txt |
コンテキストを保持
SELinuxの機能がある場合に利用できます。
コマンド例
1 |
cp --preserve=context /etc/passwd copypasswd |
コマンド例実行前
1 2 |
$ls -Z /etc/passwd -rw-r--r--. root root system_u:object_r:passwd_file_t:s0 /etc/passwd |
実行結果
1 2 3 |
$ls -Z /etc/passwd copypasswd -rw-r--r--. root root system_u:object_r:passwd_file_t:s0 /etc/passwd -rw-r--r--. centos centos system_u:object_r:passwd_file_t:s0 copypasswd |
拡張ファイル属性の保持
コマンド例
1 |
cp --preserve=xattr file.txt copyfile.txt |
コマンド例実行前
1 2 3 |
$getfattr -d file.txt # file: file.txt user.date="20171017" |
実行結果
1 2 3 4 5 6 |
$getfattr -d file.txt copyfile.txt # file: file.txt user.date="20171017" # file: copyfile.txt user.date="20171017" |
コマンド例
1 |
sudo apt-get install attr |
コマンド例
1 |
man 5 attr |
また、拡張ファイル属性は以下のコマンド等で利用できます。
コマンド例
1 |
setfattr -n user.date -v $(date +%Y%m%d) file.txt |
対話モード
(-iオプション)
-iオプションを用いると、宛先ファイルが存在する場合、上書きするかどうかを確認する対話モードになります。
対話モードの実行結果
1 2 3 4 5 6 7 8 |
$ls existfile.txt file.txt $ $cp -i file.txt existfile.txt cp: 'existfile.txt' を上書きしますか? y $ $ls existfile.txt file.txt |
強制的にコピー
(-fオプション)
通常、cpコマンドは既存ファイルが存在し、そのファイルの書き込み権限がなく、ファイルを開くことができない場合はコピーに失敗します。
コピーの失敗例
1 2 3 4 5 6 |
$ls -l 合計 0 -r--r--r-- 1 ubuntu ubuntu 0 10月 17 00:52 existfile.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 00:56 file.txt $cp file.txt existfile.txt cp: 通常ファイル 'existfile.txt' を作成できません: Permission denied |
-fオプションを用いるとそのファイルを削除した後に再度コピーを行います。また、-iオプションとは独立しているため、-iオプションは無効になりません。
関係するオプションとして、--remove-destinationオプションがあります。--remove-destinationオプションはファイルを開く前に宛先のファイルを削除します。
-fオプションは--remove-destinationオプションの違いは、ファイルが開くことができる場合、-fオプションはファイルの内容のみをコピーしファイルの権限などの属性を既存のファイルのまま維持しますが、--remove-destinationオプションはcpコマンドでファイルを作成したときのファイル属性に変更されます。
コマンド例
1 |
cp -f file.txt existfile.txt |
コマンド例実行前
1 2 3 4 |
$ls -l 合計 0 -r--r--r-- 1 ubuntu ubuntu 0 10月 17 00:52 existfile.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 00:56 file.txt |
実行結果
1 2 3 4 |
$ls -l 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 01:07 existfile.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 00:56 file.txt |
実行前とコマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ls -l 合計 0 -rwxrwxrwx 1 ubuntu ubuntu 0 10月 17 01:07 existfile.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 00:56 file.txt $cp -f file.txt existfile.txt $ls -l 合計 0 -rwxrwxrwx 1 ubuntu ubuntu 0 10月 17 01:09 existfile.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 00:56 file.txt $cp --remove-destination file.txt existfile.txt $ls -l 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 01:09 existfile.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 00:56 file.txt |
コピーするファイルを表示
(-vオプション)
cpコマンドの冗長モード(詳細な情報を表示するモード)で、cpコマンドがコピーするファイル名を表示します。
コマンド例と実行結果
1 2 |
$cp -v file.txt copyfile.txt 'file.txt' -> 'copyfile.txt' |
ファイルの親ディレクトリを作成してコピー
(--parentsオプション)
--parentsオプションは、既存のディレクトリにコピーするときに、コピー元のファイルへのディレクトリも作成してファイルをコピーします。
コマンド例
1 |
cp --parents dirA/dirB/file.txt copydir |
コマンド例実行前
1 2 3 4 5 6 7 8 |
$tree . ├── copydir └── dirA └── dirB └── file.txt 3 directories, 1 file |
実行結果
1 2 3 4 5 6 7 8 9 10 11 |
$tree . ├── copydir │ └── dirA │ └── dirB │ └── file.txt └── dirA └── dirB └── file.txt 5 directories, 2 files |
存在するファイルを上書きしない
(-nオプション)
-nオプションを用いると存在するファイルに対して上書きを行いません。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 |
$ls --full-time 合計 8 -rw-rw-r-- 1 ubuntu ubuntu 14 2017-10-17 01:28:17.018007999 +0900 existfile.txt -rw-rw-r-- 1 ubuntu ubuntu 9 2017-10-17 01:28:24.706007999 +0900 file.txt $ $cp -n file.txt existfile.txt $ls --full-time 合計 8 -rw-rw-r-- 1 ubuntu ubuntu 14 2017-10-17 01:28:17.018007999 +0900 existfile.txt -rw-rw-r-- 1 ubuntu ubuntu 9 2017-10-17 01:28:24.706007999 +0900 file.txt |
ファイルの更新
(-uオプション)
-uオプションを用いると、コピー元のファイルのタイムスタンプがコピー先のファイルのタイムスタンプより新しい場合にコピーを行います(タイムスタンプが同じ場合はコピーしません)。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 |
$ls --full-time 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 2017-10-17 01:56:46.042007999 +0900 newfile.txt -rw-rw-r-- 1 ubuntu ubuntu 0 2017-10-17 01:56:41.482007999 +0900 oldfile.txt $ $cp -u -v newfile.txt oldfile.txt 'newfile.txt' -> 'oldfile.txt' $ls --full-time 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 2017-10-17 01:56:46.042007999 +0900 newfile.txt -rw-rw-r-- 1 ubuntu ubuntu 0 2017-10-17 01:56:54.250007999 +0900 oldfile.txt |
ハードリンクの作成
(-lオプション)
-lオプションは、ファイルのハードリンクを作成することができます。
コマンド例
1 |
cp -l file.txt file_hardlink.txt |
コマンド例実行前
1 2 |
$ls -i1 13370856 file.txt |
実行結果
1 2 3 |
$ls -i1 13370856 file.txt 13370856 file_hardlink.txt |
シンボリックリンクの作成
(-sオプション)
-sオプションは、ファイルのシンボリックリンクファイルを作成することができます。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 |
$ls -l 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 02:16 file.txt $ $cp -s file.txt file_symlink_relative.txt $cp -s $(readlink -f file.txt) file_symlink_absolute.txt $ls -l 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 02:16 file.txt lrwxrwxrwx 1 ubuntu ubuntu 34 10月 17 02:17 file_symlink_absolute.txt -> /home/ubuntu/test_cp/test/file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 02:16 file_symlink_relative.txt -> file.txt |
シンボリックリンクファイル関係
(-Lオプションと-Pオプションと-Hオプションと-dオプション)
-Lオプションの場合、すべてのシンボリックリンクファイルをたどり、シンボリックリンクファイル先のファイルをコピーします。
コマンド例
1 |
cp -L -r -T dir_sym copydir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 |
$tree . ├── copydir ├── dir │ ├── file.txt │ └── file_sym.txt -> file.txt └── dir_sym -> dir 3 directories, 2 files |
実行結果
1 2 3 4 5 6 7 8 9 10 11 |
$tree . ├── copydir │ ├── file.txt │ └── file_sym.txt ├── dir │ ├── file.txt │ └── file_sym.txt -> file.txt └── dir_sym -> dir 3 directories, 4 files |
また、-Hオプションの場合、コマンドライン引数で指定したシンボリックリンクファイルのみをたどります。
コマンド例
1 |
cp -H -r -T dir_sym copydir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 |
$tree . ├── copydir ├── dir │ ├── file.txt │ └── file_sym.txt -> file.txt └── dir_sym -> dir 3 directories, 2 files |
実行結果
1 2 3 4 5 6 7 8 9 10 11 |
$tree . ├── copydir │ ├── file.txt │ └── file_sym.txt -> file.txt ├── dir │ ├── file.txt │ └── file_sym.txt -> file.txt └── dir_sym -> dir 3 directories, 4 files |
-Pオプションの場合、シンボリックリンクファイルをたどらずに、シンボリックリンクファイル自体をコピーします。
コマンド例
1 |
cp -P file_symlink.txt dir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 |
$ls -iRl .: 合計 4 13370844 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:38 dir 12976470 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 10:31 file.txt 12977582 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:31 file_symlink.txt -> file.txt ./dir: 合計 0 |
実行結果
1 2 3 4 5 6 7 8 9 10 |
$ls -iRl .: 合計 4 13370844 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:40 dir 12976470 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 10:31 file.txt 12977582 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:31 file_symlink.txt -> file.txt ./dir: 合計 0 13370847 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:40 file_symlink.txt -> file.txt |
-dオプションは、-Pオプションと--preserve=linksを合わせたオプションで、シンボリックリンクファイルはシンボリックリンク自体をコピーし、さらに複数のファイルをコピーしているときはファイルのハードリンクの関係を維持してコピーします。
コマンド例
1 |
cp -d file* dir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 10 |
$ls -iRl .: 合計 4 13370844 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:32 dir 12976470 -rw-rw-r-- 2 ubuntu ubuntu 0 10月 17 10:31 file.txt 12976470 -rw-rw-r-- 2 ubuntu ubuntu 0 10月 17 10:31 file_hardlink.txt 12977582 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:31 file_symlink.txt -> file.txt ./dir: 合計 0 |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ls -iRl .: 合計 4 13370844 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:33 dir 12976470 -rw-rw-r-- 2 ubuntu ubuntu 0 10月 17 10:31 file.txt 12976470 -rw-rw-r-- 2 ubuntu ubuntu 0 10月 17 10:31 file_hardlink.txt 12977582 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:31 file_symlink.txt -> file.txt ./dir: 合計 0 13370847 -rw-rw-r-- 2 ubuntu ubuntu 0 10月 17 10:33 file.txt 13370847 -rw-rw-r-- 2 ubuntu ubuntu 0 10月 17 10:33 file_hardlink.txt 13370848 lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:33 file_symlink.txt -> file.txt |
可能な限り構造を維持してコピー
(-aオプション)
-aオプションは、ファイルやディレクトリの構造を維持して、データをコピーします。
また、-aオプションは、「cp -dR --preserve=all」と同じになります。また、所有者とグループの保持には適切な権限を持っている必要があります。
コマンド例
1 |
sudo cp -a -T dir copydir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ls -lR .: 合計 8 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 12:14 copydir drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:52 dir ./copydir: 合計 0 ./dir: 合計 0 -rw-rw-r-- 1 owner group 0 10月 17 10:51 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:52 file_sym.txt -> file.txt |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ls -lR .: 合計 8 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:52 copydir drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:52 dir ./copydir: 合計 0 -rw-rw-r-- 1 owner group 0 10月 17 10:51 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:52 file_sym.txt -> file.txt ./dir: 合計 0 -rw-rw-r-- 1 owner group 0 10月 17 10:51 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:52 file_sym.txt -> file.txt |
コマンド例
1 |
cp -a -T dir copydir |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ls -lR .: 合計 8 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:52 copydir drwxrwxr-x 2 ubuntu ubuntu 4096 10月 17 10:52 dir ./copydir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 17 10:51 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:52 file_sym.txt -> file.txt ./dir: 合計 0 -rw-rw-r-- 1 owner group 0 10月 17 10:51 file.txt lrwxrwxrwx 1 ubuntu ubuntu 8 10月 17 10:52 file_sym.txt -> file.txt |
バックアップ
(-bオプション)
-bオプションで、ファイルが上書きされるときに、その上書きされる前のファイルをバックアップとして保存することができます。
バックアップされるファイルの接尾辞には、環境変数SIMPLE_BACKUP_SUFFIXの値がつけられます。SIMPLE_BACKUP_SUFFIXが特に設定されていない場合は、デフォルトとして~(チルダ)が使用され、末尾に~をつけたファイルがバックアップとして保存されます。
コマンド例
1 |
cp -b file.txt dir |
コマンド例実行前
1 2 3 4 5 6 7 8 9 |
$ls -lR .: 合計 4 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 14:23 dir -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:46 file.txt ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 14:23 file.txt |
実行結果
1 2 3 4 5 6 7 8 9 10 |
$ls -lR .: 合計 4 drwxrwxr-x 2 ubuntu ubuntu 4096 10月 18 14:25 dir -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:46 file.txt ./dir: 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 14:25 file.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 14:23 file.txt~ |
また、-fオプションと組み合わせることで同じファイルに対してコピーするとき、コピー元のファイルのバックアップを作成できます。
コマンド例
1 |
cp -b -f file.txt file.txt |
コマンド例実行前
1 2 3 |
$ls -l 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:46 file.txt |
実行結果
1 2 3 4 |
$ls -l 合計 0 -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 12:46 file.txt -rw-rw-r-- 1 ubuntu ubuntu 0 10月 18 14:19 file.txt~ |
ロングオプションの--backupオプションを用いるといくつかのバックアップの機能を利用することができます。また、バックアップを作成するときに-Sオプションで接尾辞を指定することもできます。
バックアップの機能
機能 | 意味 |
none off |
バックアップを作成しない |
numbered t |
常に番号付きのバックアップを作成 |
existing nil |
(デフォルト) 既に番号付きのバックアップが存在するならば、 番号付きのバックアップを作成 それ以外は単純なバックアップを作成 |
simple never |
常に単純なバックアップを作成 |
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
$tree . ├── dir │ └── file.txt └── file.txt 1 directory, 2 files $ $cp --backup=t file.txt dir $tree . ├── dir │ ├── file.txt │ └── file.txt.~1~ └── file.txt 1 directory, 3 files $ $cp --backup=t file.txt dir $tree . ├── dir │ ├── file.txt │ ├── file.txt.~1~ │ └── file.txt.~2~ └── file.txt 1 directory, 4 files $ $cp -b file.txt dir $tree . ├── dir │ ├── file.txt │ ├── file.txt.~1~ │ ├── file.txt.~2~ │ └── file.txt.~3~ └── file.txt 1 directory, 5 files $ $cp --backup=simple -S.bak file.txt dir $tree . ├── dir │ ├── file.txt │ ├── file.txt.bak │ ├── file.txt.~1~ │ ├── file.txt.~2~ │ └── file.txt.~3~ └── file.txt 1 directory, 6 files |