2013-01-15 6 views

答えて

23

ファイルを再帰的に移動するには、findmvを組み合わせてください。

find src/dir/ -name '*.txt' -exec mv {} target/dir/ \; 

ファイルを移動するときにファイル名を変更するには、処理が複雑です。 1つの方法は、各ファイル名をスラッシュをアンダースコアに変換するtr/_に渡すループを作成することです。

find src/dir/ -name '*.txt' | while read file; do 
    mv "$file" "target/dir/$(tr/_ <<< "$file")" 
done 
+0

埋め込み改行を含むファイルで動作するか、空白で始まるバージョン: 'find src/dir -name '* .txt' -exec bash -c 'mv" $ 1 "" $ {1 // \/_} "'_ {}'; '' –

1

それだけで1つのレベルだ場合:

mv *.txt */*.txt target/directory/somewhere/. 
11

これを試してみてください:それは焦がすMVプロセスを起動しないので

find source -name '*.txt' | xargs -I files mv files target 

これは、-execと任意のオプションよりも速く動作します移動する必要があるすべてのファイルに対して

+0

大きな解決策と真剣に速い... – Blacklight

+1

受け入れられた答えよりもはるかに高速です。堅牢性のために、ゼロ終端のファイル名文字列を使用することをお勧めします。 'find source -name '* .txt' -print0 | xargs -0 -Iファイルmvファイルのターゲット ' – cooperised

関連する問題