ファイルパスである単一引数を受け入れるコマンドがあるとします。
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の場合は必要ですzsh
。printf '%s\0' myfile*(.)
)