コマンドの実行結果から、他のコマンドを実行したいというのはUnix / Linux系のOSでは良くあることだと思います。
そんなときパイプを使ったり、xargsを使ったりして処理すると思うのですが、例えばディレクトリ内の30日以上経過したファイルを一括で消したいという時には
find . -mtime +30 -print | xargs rm
とか
find . -mtime +30 -exec rm {}¥;
とかして、実施すると思います。でも、例えば対象ファイルをgzip圧縮したいという場合だと、上記の方法をそのまま
find . -mtime +30 -print | xargs gzip
とか
find . -mtime +30 -exec gzip {}¥;
のように実行してしまうと、1ファイル毎に圧縮するので圧縮するためのプロセスが1つしか同時に起動していないので、最近のマルチコアのCPUを使っても処理速度が遅かったりします。こういう場合にxargsのオプションを使うと同時に複数のgzipを起動出来る事が判りました。xargsのオプションに-Pというのがあって、コマンドを同時に複数発行してくれる。manを読むとParallel mode: run at most maxprocs invocations of utility at once.とか書いてあって、目から鱗です。
例えば、上の例だと
find . -mtime +30 | xargs -P 4 gzip
と実行すると、あら不思議。同時にgzipが4つ起動するじゃありませんか。その時gzip毎に別のプロセスが起動するので当然のことながら、CPUの別のコアを使って処理されたりします。
ちょっとだけ速く処理できるという事で、便利、便利。
みうじゅん
いいね!を押そうと思ったけどありませんでした。SNSに大分かぶれてしまったようです。