created: 2020-04-30T09:01:37.000Z

bashのfor文の中身を並列処理させる

こんなスクリプトがあったとして

for i ($find ./src); do
  somecommand $i
done

forの中身 (somecommand) を並列で実行したい場合はこうすればよい

for i ($find ./src); do
  somecommand $i &
done
wait

いままでxargsを使ったりもしてたが、waitを使う方が分かりやすくてよい。

ただし、ループの数が数十とかで多くなってくるとプロセスを立ち上げすぎて遅くなったりするので、そういうときは xargs -P でやるのがよさそうではある。

参考

pidを指定しなかった場合は,実行中のすべての子プロセスの完了を待ちます