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


17

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

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

回答:




5

別のアプローチは、findmkdirを使用することです:

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

TARGETが既に存在することを確認するか、mkdirの-pオプションを使用します。


3

次のこともできます。

find inputdir -type d | cpio -pdumv destdir

シンプルさの力;)


1

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

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

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



-1
cp -al 

ハードリンクを含むすべてのファイルをコピーします。同じ構造、同じ権限。(注:ハードリンクなので、ストレージは失われません。)


ファイルシステムの境界を越えてハードリンクを作成することはできません
モニカチェッリオためMountainX


-1

ls -d * / @source:find -type d -print0> dirs.txt @destination:xargs -0 mkdir -p

これにより、両方のコマンドが空白の代わりにヌルを区切り文字として使用します。-type dと-print0の順序が重要であることに注意してください!


これは明確ではなく、間違っているようです。と思われる@sourceとは@destination、読者への兆候がありますが、そうであっても、これは動作しません。
法律
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.