すべての.txtファイルをフォルダーおよび含まれているすべてのフォルダーからターゲットディレクトリに移動するにはどうすればよいですか。
そして、できればそれらが含まれているフォルダーに名前を変更しますが、それほど重要ではありません。私はbashに精通していません。
ファイルを再帰的に移動するには、find
とmv
を組み合わせます。
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
これを試して:
find source -name '*.txt' | xargs -I files mv files target
これは、移動する必要があるすべてのファイルに対して単一のmvプロセスを呼び出さないため、-execを使用するどのオプションよりも高速に動作します。
レベルが1つだけの場合:
mv *.txt */*.txt target/directory/somewhere/.