utte

xargs 標準入力から受け取った文字列を、コマンドの引数にして実行する

xargs [オプション] [コマンド [初期引数]]

試してみる

主なオプション

-n 数1回の実行に渡す引数の最大数
-I 文字列文字列を入力1項目で置き換えて、項目ごとに実行する
-0入力をNUL文字区切りとして読む(find -print0 と組み合わせる)
-t実行するコマンドを表示する
-P 数同時に実行するプロセス数
-r入力が空のときは実行しない(GNU版)

解説

基本

xargs は、標準入力で受け取った文字列を、指定したコマンドの引数に変換して実行します。パイプは標準入力にしか渡せないので、rm や grep のように、引数でファイルを受け取るコマンドへ渡したいときに使います。

find との組み合わせ

find ... | xargs コマンド は定番の形です。ただし、ファイル名に空白や改行があると、区切りを間違えます。find -print0 | xargs -0 と書くと、NUL文字で区切るので、安全です。

引数の数と置換

入力が多いと、コマンドを複数回に分けて実行します。-n で1回あたりの数を指定できます。-I {} を使うと、入力の1項目ごとに1回ずつ実行し、{} の位置に項目を入れられます。引数の途中に差し込みたいときに使います。

入力が空のとき

GNU版の xargs は、入力が空でも、コマンドを1回実行します。避けるには -r を付けます。

引用符

標準では、空白区切りで読み、引用符やバックスラッシュを解釈します。意図しない解釈を避けるために、-0 や -d '\n' を使えます。

このコマンドを使う問題

  1. findとxargsで条件に合うファイルをまとめて処理する

関連するコマンド

LinuC 101の出題範囲