XARGS(1)

名称
xargs - 標準入力から引数を読み、コマンドを実行する

書式
xargs [-0opt] [-E eofstr] [ -I replstr [-R replacements]] [-J replstr] [-L number] [ -n number [-x]] [-P maxjobs] [-s size] [utility [argument ...]]

解説
xargs コマンドは空白、タブ、改行、EOF (end-of-file) で区切られた文字列を標準入力 から読み込み、 utility にその文字列をつけて実行します。

コマンドラインで指定された引数は、起動のたびに utility に渡されます。 このあとに続く引数は xargs の標準入力から得られます。 指定されたユーティリティ は標準入力を読み切るまで繰り返し実行されます。

空白、タブ、改行はシングルクォート (`` ' '') やダブルクォート (``"'') やバックスラッシュ (``\'') を使って埋め込むことができます。 シングルクォートは次のシングルクォートにマッチするまで、 改行とシングルクォートを除く全ての文字をエスケープします。 ダブルクォートは次のダブルクォートにマッチするまで 改行とダブルクォートを除く全ての文字をエスケープします。 改行を含む全ての文字はバックスラッシュでエスケープされます。

オプションは以下のものがあります:

-0  空白と改行ではなくヌル文字 (``\0'') を区切りとするように xargs に指示します。 find(1) の -print0 とともに用います。

-E eofstr
    eofstr を論理的な EOF マーカとして使用します。

-I replstr
    utility への引数の中に replstr が 1 回以上最大 replacements 回まで (あるいは、 -R フラグが指定されていない場合は 5 回まで) 出現したとき、出現した部分を入力行の内容全体に置換しながら utility を各入力行に対して実行します。 置換が終わったあとの結果の引数は、255バイトを超えることは許されません。 この制限は、作成される utility への引数に replstr を含んだ引数を 255 バイトになるまでできる限り連結することで 実装されています。 この 255 バイトの制限は、 replstr を含まない utility への引数には適用されず、さらに、 utility そのものは置換の対象にはなりません。 このオプションは、 -x オプションを暗黙のうちに実行します。

-J replstr
    本オプションが指定されると、 xargs は、標準入力から読み込んだデータを他のすべての引数の後に追加する代りに、 このデータを最初の replstr と置き換えます。 本オプションは、入力から読み込む引数の数 (-n) や、 xargs が生成するコマンドの大きさ (-s) には影響しません。 本オプションは、引数が置かれる場所を 実行されるコマンドの中に移動するだけです。 replstr は、 xargs にとって明確な引数 argument である必要があります。 これは、例えば引用された文字列の中にある場合には、解釈されません。 さらに、最初の replstr のみが置き換えられます。 例えば、次のコマンドは、 現在のディレクトリにある大文字で開始するファイルとディレクトリを、 destdir へコピーします:

        /bin/ls -1d [A-Z]* | xargs -J % cp -rp % destdir

-L number
    number 行読み込むたびに utility を実行します。 EOF に到達したとき number 行よりも少ない行数しか読み込んでいない場合は、 読み込み終わっている行を使って utility を呼びだします。

-n number
    各 utility 実行時に標準入力から拾う引数の最大数を設定します。 もし計算されたバイト数が、指定された size を越えた場合 ( -s オプション参照) や utility の最後の実行時に残った引数が number 個以下の場合、 utility は、標準入力から読み込んだ引数のうち number より少数しか使いません。 number の現在のデフォルト値は 5000 です。

-o  子プロセスによるコマンド実行前に、標準入力を /dev/tty として再オープンします。 xargs に対話的なアプリケーションを実行させたい場合に有用です。

-P maxprocs
    並列モード。 一度に最大 maxprocs まで utility を実行させます。

-p  実行される予定のコマンドを表示し、実行すべきかどうかをユーザに 尋ねます。肯定の応答、つまり POSIX ロケールでは ‘y’ を返すと、表示したコマンドが実行され、それ以外の応答を返すと コマンドはスキップされます。 プロセスが端末に接続されていない場合は、どのコマンドも実行される ことはありません。

-R replacements
    -I オプションで置換を行う引数の最大数を指定します。 replacements が負の場合、置換対象の引数の数は無制限です。

-s size
    utility に渡すコマンドラインの最大バイト数をセットします。 utility 名の長さ、 utility に渡される引数の長さの和 (終端の NULL も含む)、そして現在の環境がこの値以下になります。 size の現在のデフォルト値は ARG_MAX - 4096 です。

-t  実行されるコマンドをその実行の直前に標準エラー出力にエコーします。

-x  引数の個数が指定した (もしくはデフォルトの) コマンドライン長と 合わない場合、 xargs を強制終了します。

もし utility が指定されていなければ、 echo(1) が使われます。

utility が標準入力を読むプログラムの場合は予期せぬ動作をするかもしれません。

コマンドラインを集められなかったときや utility を起動できなかったとき、 utility がシグナルで終了したとき、もしくは utility が戻り値 255 で終了したときは、 xargs は (それ以上の読み込みはせずに) ただちに終了します。

診断
xargs は、何もエラーが起こらなければ、戻り値 0 で終了します。 utility が見つからなかった場合は、 戻り値 127 で終了します。 utility が実行できなかった場合は 戻り値 126 で終了します。その他のエラーでは戻り値 1 で終了します。

関連項目
echo(1), find(1), execvp(3)

規格
xargs ユーティリティは p1003.2 互換です。 -J, -o, -P, -R オプションは非標準の FreeBSD 拡張であり、他のオペレーティングシステムでは利用できないかもしれません。

歴史
xargs コマンドは PWB UNIX で登場しました。

バグ
引数の数や環境の大きさが増加するような他のコマンドの起動を utility が試みる場合、 execvp(3) が E2BIG で失敗する危険があります。

xargs ユーティリティは、 -I と -J オプションで文字列の比較を行う時に、マルチバイト文字を考慮しません。 このため、いくつかのロケールでは誤った結果を生ずることがあります。