24

すべての.txtファイルをフォルダおよび含まれているすべてのフォルダからターゲットディレクトリに移動するにはどうすればよいですか。

そして、できれば、それらが含まれているフォルダに名前を変更することをお勧めしますが、それはそれほど重要ではありません。私はbashに精通していません。

4

3 に答える 3

40

ファイルを再帰的に移動するには、と組み合わせ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}"置き換えるために使用するループを作成することです。fromto$var

find src/dir/ -name '*.txt' -print0 | while IFS= read -rd $'\0' file; do
    mv -- "$file" target/dir/"${file//\//_}"
done

はスラッシュであるため、これは醜いfromです。スラッシュは、としてエスケープする必要があります\/

参照:

于 2013-01-15T19:56:39.903 に答える
16

これを試して:

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

これは、移動する必要のあるすべてのファイルに対して単一のmvプロセスを呼び出さないため、-execを使用したどのオプションよりも高速に機能します。

于 2013-01-15T20:11:04.383 に答える
1

1つのレベルの場合:

mv *.txt */*.txt target/directory/somewhere/.
于 2013-01-15T19:59:50.560 に答える