25,408 views
この記事は最終更新から 839日 が経過しています。
1. やりたいこと
cp コマンドでディレクトリごとコピーする場合の TIPSを記録しておく。
ちなみに…
ディレクトリごと再帰的にコピーしたい場合は r オプションを付ける。
2. やってみる
コピー元のディレクトリは、以下のようなディレクトリ AAA とする。
その配下に二つのディレクトリ AAA1, AAA2と、一つのテキストファイル aaa.txt を持つ。
$ ls -l drwxrwxr-x 4 user user 4096 Nov 20 09:04 AAA $ ls -l ./AAA total 12 drwxrwxr-x 2 watase watase 4096 Nov 20 09:04 AAA1 drwxrwxr-x 2 watase watase 4096 Nov 20 09:04 AAA2 -rw-rw-r-- 1 watase watase 5 Nov 20 09:04 aaa.txt
【Case 1】コピー先ディレクトリがなければ自動で作成される。
コピー先として指定したディレクトリ BBB が存在しない場合、BBBが自動生成 される。
BBB直下には、AAAディレクトリ配下のディレクトリとファイルがコピー される。
$ ls -l
drwxrwxr-x 4 user user 4096 Nov 20 09:04 AAA
$ cp -r ./AAA ./BBB
$ ls -l
drwxrwxr-x 4 user user 4096 Nov 20 09:04 AAA
drwxrwxr-x 2 user user 4096 Nov 20 09:04 BBB
$ ls -l ./BBB
drwxrwxr-x 2 user user 4096 Nov 20 09:04 AAA1
drwxrwxr-x 2 user user 4096 Nov 20 09:04 AAA2
-rw-rw-r-- 1 user user 5 Nov 20 09:04 aaa.txt
↓ こうなる ↓
【Case 2】コピー先ディレクトリがあれば、その配下にディレクトリを作成する。
コピー先として指定したディレクトリ CCC が存在する場合、CCC直下には AAAディレクトリを含めてその配下のファイルとディレクトリがコピー される。
$ mkdir ./CCC
$ ls -l
drwxrwxr-x 4 user user 4096 Nov 20 09:04 AAA
drwxrwxr-x 4 user user 4096 Nov 20 09:05 CCC
$ cp -r ./AAA ./CCC
$ ls -l
drwxrwxr-x 4 user user 4096 Nov 20 09:04 AAA
drwxrwxr-x 2 user user 4096 Nov 20 09:04 CCC
$ ls -l ./CCC
drwxrwxr-x 4 user user 4096 Nov 20 09:04 AAA
$ ls -l ./CCC/AAA
drwxrwxr-x 2 user user 4096 Nov 20 09:04 AAA1
drwxrwxr-x 2 user user 4096 Nov 20 09:04 AAA2
-rw-rw-r-- 1 user user 5 Nov 20 09:04 aaa.txt
↓ こうなる ↓
【Case 3】コピー先ディレクトリがあっても、T オプション指定で【Case 1】と同じ動作をする。
コピー先として指定したディレクトリ DDD が存在し且つ、T オプションが指定された場合、DDD直下には AAAディレクトリ配下のディレクトリとファイルがコピー される。
$ mkdir ./DDD
$ ls -l
drwxrwxr-x 4 user user 4096 Nov 20 09:04 AAA
drwxrwxr-x 4 user user 4096 Nov 20 09:06 DDD
$ cp -rT ./AAA ./DDD
$ ls -l
drwxrwxr-x 4 user user 4096 Nov 20 09:04 AAA
drwxrwxr-x 2 user user 4096 Nov 20 09:04 DDD
$ ls -l ./DDD
drwxrwxr-x 2 user user 4096 Nov 20 09:04 AAA1
drwxrwxr-x 2 user user 4096 Nov 20 09:04 AAA2
-rw-rw-r-- 1 user user 5 Nov 20 09:04 aaa.txt
↓ こうなる ↓
3. まとめ
(1) コピー先のディレクトリが既に存在する場合は?
コピー元のディレクトリを含め、その配下のすべてをコピーしたい場合は r オプションだけでよい。
※AAAを CCC配下にコピーする。
コピー元のディレクトリを含めず、その配下のすべてをコピーしたい場合は rT オプションを付ける。
※AAAの配下すべてを DDD配下にコピーする。
(2) コピー先のディレクトリが存在しない場合は?
コピー先のディレクトリが自動生成される。
コピー先のディレクトリには、コピー元のディレクトリを含めず、その配下のすべてがコピーされる。
※AAAが同じ階層に複製され、ディレクトリ名がBBBにリネームされたのと同じこと。
4. 所感
・こんなことを書き留めておかないと忘れてしまうとは、悲しいかな脳の衰えが進行しているようだ…
・ディレクトリ名の末端に / スラッシュを付ける or 付けないは関係ない。