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を指定しなかった場合は,実行中のすべての子プロセスの完了を待ちます

勉強の戦略――9割の「努力」をやめ、真に必要な一点に集中する
[ad] 勉強の戦略――9割の「努力」をやめ、真に必要な一点に集中する
岡 健作 (単行本)