GNU Parallel が便利

GNU Parallel を使ってみた。for ループと違って、並列実行できるのがよい。並列実行だけなら xargs -P でもいけるが、引数置換が豊富なのがよい。そのままファイル名を渡す {} に加えて、{.} で拡張子より前だけ、{/}でディレクトリ除去だけ、{/.} でディレクトリと拡張子除去。{#} で通し番号。

parallel -P10 ruby script.rb {} {/.}_output.dat {/.}.log ::: ../data/*.dat

みたいにして処理している。

なお、何が起きるのか確認するには、--dry-run をつける。覚えにくければ、コマンド名の前に echo を入れてもいい。

xargs と違って、">" {.}.log のようにすれば、リダイレクトも可能!

使用例は、KOSHIGOE学習帳 - [system] GNU parallel 使用例 が詳しい。