サブディレクトリのファイルのみコピー(Rsync)

サブディレクトリのファイルのみコピー(Rsync)

少しでも助けてもらえたらとても嬉しいです。ディレクトリ構造のスナップショットを想像してみましょう。

../test1/test6/test62.txt
../test1/test6/test65.txt
../test1/test6/test67.txt
../test1/test6/test69.txt
../test1/test6/test60.txt
../test1/test6/test68.txt
../test1/test6/test63.txt
../test1/test6/test66.txt
../test1/test6/test64.txt
../test1/test6/test61.txt
../test2/test1/test2.txt
../test2/test1/test9.txt
../test2/test1/test1.txt
../test2/test1/test6.txt
../test2/test1/test3.txt
../test2/test1/test8.txt
../test2/test1/test4.txt
../test2/test1/test10.txt
../test2/test1/test5.txt
../test2/test1/test7.txt

私の究極の目標は、すべての.txtファイルを新しいディレクトリ(ターゲットなど)にコピーすることです。

実際には多くのディレクトリがあります。

とても良いcpコマンドを見つけました。

cp ../**/**/*.txt .

しかし、問題があります。 250GBの画像などファイルが多く、cpエラーは次のとおりです。

Argument list too long

rsyncを使ってこれを行う方法について少し読みましたが、これは正しい方法だと思いますが、コマンドを作成して除外して含める項目を正確に作成することに頭を閉じることはできません。

答え1

すべてのディレクトリパスが..。個人的には、私はさらに一歩上がり、ファイルを指定されたサブディレクトリにコピー/移動/リンクすることをお勧めします。

ただし、これにより、..以前にコピーしたファイルをコピーしようとしないようにすることができます。

find ../ -mindepth 3 -type f -name '*.txt' -exec cp --target-directory . -- {} +

lnコピーする代わりにリンクが十分な場合はcp、ところで確認してみてください。同様にmv、動きが望む意図であっても同様です。cp -p権限、タイムスタンプなどを保存したい場合に使用してください。

同じ名前のファイルが複数ある場合は、最後のコピーを除くすべてのファイルが上書きされます。最後の項目を除くすべての項目を使用すると、mvその項目は失われます。最初のものだけを使用するとln正常に接続されます。

答え2

動作する動作するソリューションを見つけました。 findとrsyncを使用してください。

find ../. -type f -name "*.txt" -exec rsync -av {} . \;

関連情報