シェルだけで簡単にコマンドを並列実行するのに、xargs
の-P
オプションがあります。
GNU Parallelも便利ですが、そちらはmacユーザーだと別途インストールが必要なので、こちらを紹介します。
使い方
xargs -Pn
-P
で並列実行の最大のプロセス数を指定します。
GNU版の場合、-P0
で自動で最大限のプロセスを指定してくれますが、macなどBSD版の場合、n>0
の制約がついています。
活用例
例1. 一括画像リサイズ
find . -type f -name "*.jpg" | xargs -I@ -P8 convert -resize 100x100 @ @
Imagemagickと組み合わせて、画像を一括リサイズします。
例2. 連番ダミー画像生成
seq 1 100 | xargs -I@ -P8 convert -size 600x600 -pointsize 150 -gravity Center label:No.@ @.jpg
またImagemagickの例になってしまうのですが、大量に画像を生成する時なども効率的です。
例3. 動画の変換
find . -type f -name "*.MOV" | xargs -I@ -P8 ffmpeg -i @ -vf scale=320:-1 -r 15 @.gif
ffmpegとも相性がいいです。
おわりに
簡単な画像処理などは、Photoshopのバッチ処理や、Pythonなどで書くよりも断然楽をできると思います。
その他、wget
やcurl
等と組み合わせて、画像のクローリングなどにも使用できますが、サーバーに負荷がかかってしまうので、その場合はプロセスを増やしすぎるのはお勧めできません。