ある場所から別の場所に約200のディレクトリとサブディレクトリをコピーしたいのですが、それらのディレクトリ内の何千ものファイルをコピーしたくありません。私はLinuxを使用しています。
注:すべてをコピーしてすべてのファイルを削除するのに十分なスペースがありません。
ちょうどこれを見つけました:
rsync -a -f"+ */" -f"- *" source/ destination/
http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
別のアプローチはfindおよびmkdirを使用することです:
find SOURCE -type d -exec mkdir TARGET/{} \;
TARGETがすでに存在することを確認するか、mkdirの-pオプションを使用してください。
あなたも行うことができます:
find inputdir -type d | cpio -pdumv destdir
シンプルさの力;)
同様に、(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
のない名前にスペースが含まれるファイル/ディレクトリは処理しません)。
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p