web-dev-qa-db-ja.com

Linuxでファイルではなくディレクトリツリーをコピーするにはどうすればよいですか?

ある場所から別の場所に約200のディレクトリとサブディレクトリをコピーしたいのですが、それらのディレクトリ内の何千ものファイルをコピーしたくありません。私はLinuxを使用しています。

注:すべてをコピーしてすべてのファイルを削除するのに十分なスペースがありません。

18
Kyle West

ちょうどこれを見つけました:

rsync -a -f"+ */" -f"- *" source/ destination/

http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html

25
Kyle West
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...

別のアプローチはfindおよびmkdirを使用することです:

find SOURCE -type d -exec mkdir TARGET/{} \;

TARGETがすでに存在することを確認するか、mkdirの-pオプションを使用してください。

5

あなたも行うことができます:

find inputdir -type d | cpio -pdumv destdir

シンプルさの力;)

3
Pilou

同様に、(GNU)tarを使用:

find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)

改行文字を含むファイル名がある場合を除いて、findコマンドラインの-print0やrsyncコマンドラインの-0は実際には必要ありません(可能ですが、ほとんどありません)。 Tar(およびrsync、cpio)はファイル名を1行ずつ読み取ります。 NULLターミネータの使用は、通常、空白で区切られたファイル名を読み取るxargsで最も役立ちます(そのため、-0のない名前にスペースが含まれるファイル/ディレクトリは処理しません)。

1
larsks
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
1
SergioAraujo