今回はcpioでディレクトリをコピーを行います。
コピー元のディレクトリはこれです。
takk@deb9:~/tmp$ ls dir1 takk@deb9:~/tmp$ ls -l dir1 合計 32 -rw-r--r-- 1 takk takk 8 5月 6 20:08 x00 -rw-r--r-- 1 takk takk 8 5月 6 20:08 x01 -rw-r--r-- 1 takk takk 8 5月 6 20:08 x02 -rw-r--r-- 1 takk takk 8 5月 6 20:08 x03 -rw-r--r-- 1 takk takk 8 5月 6 20:08 x04 -rw-r--r-- 1 takk takk 8 5月 6 20:08 x05 -rw-r--r-- 1 takk takk 8 5月 6 20:08 x06 -rw-r--r-- 1 takk takk 8 5月 6 20:08 x07 takk@deb9:~/tmp$
cpioの前に、cpによるディレクトリコピー。
cpでコピーするには、-rオプションを指定してコピー元、コピー先を指定するだけなので簡単ですね。
takk@deb9:~/tmp$ cp -r dir1 dir2 takk@deb9:~/tmp$ ls dir1 dir2 takk@deb9:~/tmp$ ls -l dir2 合計 32 -rw-r--r-- 1 takk takk 8 5月 6 20:23 x00 -rw-r--r-- 1 takk takk 8 5月 6 20:23 x01 -rw-r--r-- 1 takk takk 8 5月 6 20:23 x02 -rw-r--r-- 1 takk takk 8 5月 6 20:23 x03 -rw-r--r-- 1 takk takk 8 5月 6 20:23 x04 -rw-r--r-- 1 takk takk 8 5月 6 20:23 x05 -rw-r--r-- 1 takk takk 8 5月 6 20:23 x06 -rw-r--r-- 1 takk takk 8 5月 6 20:23 x07 takk@deb9:~/tmp$
ではcpioでコピーしましょう。-pオプションを指定します。
cpioに標準入力でファイルリストを与えて、引数にコピー先ディレクトリを指定します。
takk@deb9:~/tmp$ ls dir1 takk@deb9:~/tmp$ find dir1 | cpio -p dir2 cpio: dir2/dir1: Cannot mkdir: そのようなファイルやディレクトリはありません cpio: dir2/dir1/x02: Cannot open: そのようなファイルやディレクトリはありません cpio: dir2/dir1/x05: Cannot open: そのようなファイルやディレクトリはありません cpio: dir2/dir1/x03: Cannot open: そのようなファイルやディレクトリはありません cpio: dir2/dir1/x01: Cannot open: そのようなファイルやディレクトリはありません cpio: dir2/dir1/x07: Cannot open: そのようなファイルやディレクトリはありません cpio: dir2/dir1/x00: Cannot open: そのようなファイルやディレクトリはありません cpio: dir2/dir1/x06: Cannot open: そのようなファイルやディレクトリはありません cpio: dir2/dir1/x04: Cannot open: そのようなファイルやディレクトリはありません 0 blocks takk@deb9:~/tmp$
だめでした。
コピー先のディレクトリが存在しないため、エラーになりました。
予めディレクトリを作成しておくか、cpio -pオプションに-dオプションも併用する必要があります。
takk@deb9:~/tmp$ ls dir1 takk@deb9:~/tmp$ mkdir dir2 takk@deb9:~/tmp$ find dir1 | cpio -p dir2 1 block takk@deb9:~/tmp$
これでコピーできたはずですが、どうでしょうか。
コピー先を確認します。
takk@deb9:~/tmp$ ls -l dir2 合計 4 drwxr-xr-x 2 takk takk 4096 5月 6 20:43 dir1 takk@deb9:~/tmp$ find dir2 dir2 dir2/dir1 dir2/dir1/x02 dir2/dir1/x05 dir2/dir1/x03 dir2/dir1/x01 dir2/dir1/x07 dir2/dir1/x00 dir2/dir1/x06 dir2/dir1/x04 takk@deb9:~/tmp$
なぜかdir2の下にdir1がごっそりまるごとコピーされています。
dir1の配下がすべて、dir2下に格納されてほしいのに。
いったんdir1の中にカレントディレクトリを切り替えてから、コピーする必要がありそうです。
takk@deb9:~/tmp$ ls dir1 takk@deb9:~/tmp$ (cd dir1;find | cpio -pd ../dir2) 1 block takk@deb9:~/tmp$ ls dir1 dir2 takk@deb9:~/tmp$ ls -l dir2 合計 32 -rw-r--r-- 1 takk takk 8 5月 6 21:00 x00 -rw-r--r-- 1 takk takk 8 5月 6 21:00 x01 -rw-r--r-- 1 takk takk 8 5月 6 21:00 x02 -rw-r--r-- 1 takk takk 8 5月 6 21:00 x03 -rw-r--r-- 1 takk takk 8 5月 6 21:00 x04 -rw-r--r-- 1 takk takk 8 5月 6 21:00 x05 -rw-r--r-- 1 takk takk 8 5月 6 21:00 x06 -rw-r--r-- 1 takk takk 8 5月 6 21:00 x07 takk@deb9:~/tmp$
今度はうまくいきましたが、ものすごくめんどくさいです。
普通にcp -r使った方がよいですね。
コメント