4

ディレクトリには多くのサブディレクトリがあり、これらの各サブディレクトリにはさまざまな種類のファイルが多数あります。各サブディレクトリから特定の拡張子を持つすべてのファイルを抽出し、別のフォルダーに配置したいと考えています。これを行うためにbashスクリプトを書くことは可能ですか? もしそうなら、どのように?

4

4 に答える 4

10
$ find <directory> -name '*.foo' -exec mv '{}' <other_directory> \;

findディレクトリ構造を再帰的に検索し、検索条件に一致するファイルが見つかった場合は、指定されたアクションを実行します。

この場合、-name '*.foo'は検索基準であり、見つかったすべてのファイルに対して実行するよう-exec mv '{}' <other_directory> \;に指示findします。ここで、 はファイル名に変換され、コマンドの終わりを表します。 mv'{}'\;

于 2012-07-10T16:37:55.660 に答える
7

あなたがbash v4を持っていて、

shopt -s globstar

.profile では、次を使用できます。

mv ./sourcedir/**/*.ext ./targetdir
于 2012-07-10T17:00:53.140 に答える
2

find と単純な while ループを使用すると、次のようになります。

find directory -name '*.foo'|while read file; do
    mv $file other_directory/
done

ここでは、.foo接尾辞を持つすべてのファイルを other_directory/に移動します

于 2012-07-10T16:35:23.087 に答える
1

findxargsを使用して、ループまたはmvへの複数回の呼び出しの必要性を減らすことができます。

find /path/to/files -type f -iname \*foo -print0 |
    xargs -0 -I{} mv {} /path/to/other/dir
于 2012-07-10T16:42:17.370 に答える