web-dev-qa-db-ja.com

特定のタイプのすべてのファイルをBashのターゲットディレクトリに再帰的に移動する

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

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

17
Mehran

ファイルを再帰的に移動するには、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
31
John Kugelman

これを試して:

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

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

16
Mithrandir

レベルが1つだけの場合:

mv *.txt */*.txt target/directory/somewhere/.
1
DigitalRoss