xargsによるshellスクリプトの並列化

2016/06/25

xargs -P max-procsを使えば、同時実行プロセス数を指定して、並列処理ができる。
max-procsが0の時、できるだけ多くのプロセスを起動する。1以上の時は、その数のプロセスを起動する。

例:lsの結果を1つずつsomecommandに渡し、8並列で動かす。

-P 8で8並列実行を行う。
-n 1でsomecommandに渡す引数を最大1つにしている。somecommandが何個の引数をとれるのか、あるいは必要とするのかによって、数値を設定する。

例:filenameに入っている各行をechoに渡し、引数の順番を変えて後ろに[改行]という文字をつけ、ランダムに表示する。

-P 0でできるだけ多くのプロセスを起動する。
-I {}で引数を"{}"にバインドしてくれる。{}の代わりに%でもOK。
-Iをつけると、スペースで区切られず、改行のみで区切られるようになるが、空行が表示されなくなる。
空行が表示されなくなるのは、-Iをつけると-xと-L 1が自動でつけられ、-Lは空行を使用しないため。
-L 1がつけれられ、1コマンドラインにつき最大1行の入力行を使用するため、-n 1は機能が被るので不要。

-nも-Lも空白は無視するが、-dでdelimiterを指定すれば、空行でも表示できる。(指定された文字以外のあらゆる文字が文字通りに解釈され、ファイル終端文字列も無効になるため)
スペースでも改行でも区切りたければ、はじめに-d ' ' -n 1で一つずつスペースで区切ったものを、改めてxargsに渡せばいい。

-Linux
-