パターンに一致する複数のファイルに対して並列にコマンドを実行する

パターンに一致する複数のファイルに対して並列にコマンドを実行する

ファイルパスである単一引数を受け入れるコマンドがあるとします。

mycommand myfile.txt

これで、複数のファイル、特にパターンに一致するファイルでこのコマンドを並列に実行したいと思いますmyfile*

これを達成する簡単な方法はありますか?

ベストアンサー1

xargsプロセス交換をサポートするGNUおよびシェルの使用

xargs -r -0 -P4 -n1 -a <(printf '%s\0' myfile*) mycommand

mycommand最大4秒間並列に実行できます。

標準入力を使用しない場合は、次のようにすることもmycommandできます。

printf '%s\0' myfile* | xargs -r -0 -P4 -n1 mycommand

xargsこれは最新のBSDにも当てはまります。

ファイルを再帰的に検索するには、myfile*コマンドprintfを次のように置き換えます。

find . -name 'myfile*' -type f -print0

-type f通常のファイルでのみ機能します。対応するglobの場合は必要ですzshprintf '%s\0' myfile*(.)

おすすめ記事