すべての.txtファイルをフォルダおよび含まれているすべてのフォルダからターゲットディレクトリに移動するにはどうすればよいですか。
そして、できれば、それらが含まれているフォルダに名前を変更することをお勧めしますが、それはそれほど重要ではありません。私はbashに精通していません。
すべての.txtファイルをフォルダおよび含まれているすべてのフォルダからターゲットディレクトリに移動するにはどうすればよいですか。
そして、できれば、それらが含まれているフォルダに名前を変更することをお勧めしますが、それはそれほど重要ではありません。私はbashに精通していません。
ファイルを再帰的に移動するには、と組み合わせfind
ますmv
。
find src/dir/ -name '*.txt' -exec mv -t target/dir/ -- {} +
find
または、macOSなどのGNUバージョンのがないUNIXシステムでは、次を使用します。
find src/dir/ -name '*.txt' -exec mv -- {} target/dir/ ';'
ファイルを移動するときにファイルの名前を変更するには、注意が必要です。1つの方法は、のすべての出現箇所をで"${var//from/to}"
置き換えるために使用するループを作成することです。from
to
$var
find src/dir/ -name '*.txt' -print0 | while IFS= read -rd $'\0' file; do
mv -- "$file" target/dir/"${file//\//_}"
done
はスラッシュであるため、これは醜いfrom
です。スラッシュは、としてエスケープする必要があります\/
。
参照:
これを試して:
find source -name '*.txt' | xargs -I files mv files target
これは、移動する必要のあるすべてのファイルに対して単一のmvプロセスを呼び出さないため、-execを使用したどのオプションよりも高速に機能します。
1つのレベルの場合:
mv *.txt */*.txt target/directory/somewhere/.