(118) cpコマンドでディレクトリごとコピーするときのいろいろ

投稿者: | 2019年11月20日

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

(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

(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

(3) コピー先ディレクトリがあっても、T オプションで(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 付けないは関係ない。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です