xargs コマンド

目的

パラメーター・リストを作成し、コマンドを実行します。

構文

xargs [-p t x ] [-e [EOFString]] [-E EOFString] [-i [ReplaceString] ] [-I ReplaceString | -L Number | -n Number] [ -l [ Number]] [-s Size] [Command [Argument ... ]]

注: 小文字フラグとパラメーターの間にはブランク・スペースを入れないでください。

説明

生成されるコマンド・ラインの長さは、Command と、各文字列の null バイト・ターミネーターを含む、文字列として処理される各 Argument のバイト数の和です。 xargs コマンドは、コマンド・ラインの長さを制限します。 作成されたコマンド・ラインを実行する場合に、Argument と環境を組み合わせたリストの長さは、ARG_MAX バイトを超えることはできません。 -n または -s フラグを指定しないと、デフォルトのコマンド・ラインの長さは、この制限の範囲内で LINE_MAX で指定した値以上となります。

フラグ

項目 説明
-e[EOFString] 旧バージョンのフラグ。-E フラグを使用してください。

EOFString パラメーターを論理 EOF 文字列として使用します。 -e または -E フラグを指定しなければ、論理 EOF 文字列には下線文字 (_) が想定されます。 EOFString パラメーターを指定しなければ、論理 EOF 文字列機能は使用不可になり、下線文字はリテラル文字として解釈されます。 xargs コマンドは、EOF 文字または指定された文字列に達するまで、標準入力を読み取ります。

-E EOFString デフォルトの下線 (_) を置き換える論理 EOF 文字列を指定します。xargs コマンドは、EOF 文字または指定された文字列に達するまで標準入力を読み取ります。
-i[ReplaceString] 旧バージョンのフラグ。-I (i の大文字) フラグを使用してください。

ReplaceString パラメーターを指定しなければ、文字列 {} が使用されます。

注: -I (i の大文字)、i-L (l の大文字)、l、および -n の各フラグは相互に排他的です。最後に指定されたフラグが有効になります。

-I ReplaceString (i の大文字)。標準入力の各行を Command パラメーターの引数として挿入 (つまり、出現する各 ReplaceString に対する Argument に挿入) します。 ReplaceStrings は、6 個以上の引数で使用できません。各標準入力行の先頭のブランク文字は無視されます。 各 Argument には、1 つ以上の ReplaceStrings を含むことができますが、 255 バイト以上になってはなりません。 -I フラグは、-x フラグもオンにします。

-I (i の大文字) フラグは -L1 を意味します。したがって、一度に 1 つだけの標準入力行を引数として置換できます。置換された文字列がコマンド・パラメーターで 2 回以上表示される場合、置換された文字列のオカレンスごとに、同じ標準入力行が置換されます。

注: -I (i の大文字)、i-L (l の大文字)、l、および -n の各フラグは相互に排他的です。最後に指定されたフラグが有効になります。

-l[Number] l (L の小文字)。旧バージョンのフラグ。-L フラグを使用してください。

Number パラメーターを指定しなければ、値 1 が使用されます。 また、-l フラグは -x フラグもオンにします。

注: -I (i の大文字)、i-L (l の大文字)、-l、および -n の各フラグは相互に排他的です。最後に指定されたフラグが有効になります。

-L Number 空でないパラメーター行を指定された数だけ標準入力から読み取って、Command パラメーターを実行します。残りの Number が指定された数よりも少なければ、Command を最後に呼び出すときに、パラメーター行の数を減らすことができます。行の最後の文字がスペースまたはタブでない限り、行は最初の改行文字で終了します。後続スペースは、次の空でない行への継続を示します。

標準入力から Number 行を読み取り、コマンド・ラインの末尾に置きます。

注: -I (i の大文字)、i-L (l の大文字)、-l、および -n の各フラグは相互に排他的です。最後に指定されたフラグが有効になります。

-n Number できるだけ多くの標準入力引数を使用して、Number パラメーターで指定された範囲内で、Command パラメーターを実行します。

標準入力から Number 引数の最大値を読み取り、コマンド・ラインの末尾に置きます。

以下の場合には、xargs コマンドで使用する引数の数が減少します。
  • 集計されたコマンド・ラインの長さが -s Size フラグで指定したバイト数を超える場合
  • 最後の反復の引数の数が、Number 引数で指定した値よりも少ないが、ゼロ個ではない場合。

    注: -I (i の大文字)、i-L (l の大文字)、-l、および -n の各フラグは相互に排他的です。最後に指定されたフラグが有効になります。

-p Command パラメーターを実行するかどうかを尋ねます。作成されたコマンド・ラインに続けて、?... (疑問符と省略符号) プロンプトを表示します。Command パラメーターを実行するには、ロケールに固有の肯定応答を入力します。 他の応答を入力すると、 xargs コマンドはパラメーターの特定の呼び出しをスキップします。呼び出しごとにプロンプトが表示されます。 -p フラグは、-t フラグもオンにします。
-s Size 作成される Command 行の最大合計サイズを設定します。Size パラメーターには、必ず正の整数を指定してください。以下の場合には、使用される引数の数が減少します。
  1. 引数の合計数が、-n フラグで指定した数を超える場合。
  2. 行の合計数が -L フラグまたは -l (L の小文字) フラグで指定した行数を超える場合。
  3. Size パラメーターで指定したバイト数まで累積する前に、EOF 文字に達した場合。
-t トレース・モードを使用可能にして、作成済みの Command 行を標準エラーにエコーしてから実行します。
-x Command 行が -s Size フラグで指定されたバイト数より大きい場合に、xargs コマンドの実行を停止します。-I (i の大文字) フラグまたは -l (L の小文字) フラグのいずれかを指定すると、この -x フラグがオンになります。 -i-I (i の大文字)、 -l (L の小文字)、-L または -n フラグを指定しないと、Command 行の合計の長さは、-s Size フラグで指定した限度を超えません。

終了状況

このコマンドは、下記の終了値を戻します。

項目 説明
0 Command パラメーターのすべての呼び出しが、終了状況 0 を戻しました。
1-125 指定された要件を満たすコマンド・ラインをアセンブルできなかったか、Command パラメーターの 1 回または数回の呼び出しで、ゼロ以外の終了状況が戻されたか、またはその他のエラーが発生しました。
126 Command を見つけましたが、呼び出せません。
127 Command が見つかりません。

指定された要件を満たすコマンド・ラインをアセンブルできない場合、コマンドの呼び出し不能、シグナルによる打ち切り、終了状況 255 による終了のいずれかが起こります。 xargs コマンドは、残りの入力を何も処理せずに、診断メッセージを書き込んで終了します。

  1. ファイル内で名前がリストされるファイル上でコマンドを使用するには、以下のように入力します。
    
    xargs lint -a <cfiles
    cfiles ファイルに以下のテキストが入っているとします。
    main.c readit.c
    gettoken.c
    putobj.c
    xargs コマンドは以下のコマンドを作成して実行します。
    lint -a main.c readit.c gettoken.c putobj.c
    cfiles ファイルに入っているファイル名が多すぎて、シェル・コマンド 1 行 (最大 LINE_MAX) に入りきれない場合、 xargs コマンドは 1 行におさまるファイル名を使用して lint コマンドを実行します。 次に、残りのファイル名を使用して、別の lint コマンドを作成して実行します。 cfiles ファイルにリストされる名前によって、コマンドは以下のようになります。
    
    lint -a main.c readit.c gettoken.c . . .
    lint -a getisx.c getprp.c getpid.c . . .
    lint -a fltadd.c fltmult.c fltdiv.c . . .
    このコマンド・シーケンスは、一度にすべてのファイル名を使用して lint コマンドを実行する場合とは少し異なります。 lint コマンドはファイル間の相互参照を検査します。 しかし、この例では、main.cfltadd.c の間の、または別個のコマンド・ラインにリストされた 2 つのファイルの間を検査できません。

    このため、すべてのファイル名が 1 行に入りきる場合にのみ、コマンドを実行したい場合があります。 そのような場合は、以下のように -x フラグを使用して、これを xargs コマンドに対して指定します。

    xargs  -x  lint -a <cfiles
    cfiles ファイル内のすべてのファイル名が 1 つのコマンド・ラインに入りきらない場合には、xargs コマンドはエラー・メッセージを表示します。
  2. ある数個のファイル名が入っているコマンドを作成するには、以下のように入力します。

    xargs  -t  -n  2 diff <<EOF
    starting chap1 concepts chap2 writing
    chap3
    EOF
    このコマンド・シーケンスは、それぞれ 2 つのファイル名を含む (-n 2) diff コマンドを作成して、実行します。
    
    diff starting chap1
    diff concepts chap2
    diff writing chap3
    -t フラグを使用すると、xargs コマンドは実行する前に各コマンドを表示するので、現在何をしているか見ることができます。 <<EOFEOF パターン・マッチング文字は、 最終行の前に入力されたテキストを xargs コマンドの標準入力として使用する here ドキュメントを定義します。
  3. コマンド・ラインの中間にファイル名を挿入するには、以下のように入力します。
    ls | xargs  -t  -I  {} mv {} {}.old
    このコマンド・シーケンスは、各名前の最後に .old を追加することで、現行ディレクトリー内のすべてのファイルを名前変更します。 -I フラグは、xargs コマンドに対して、{} (中括弧) が表示される所に ls ディレクトリー・リストの各行を挿入するように指示します。 現行ディレクトリーにファイル chap1chap2chap3 が入っている場合、 このコマンドは以下のコマンドを作成します。
    
    mv chap1 chap1.old
    mv chap2 chap2.old
    mv chap3 chap3.old
  4. 個別に選択したファイル上でコマンドを実行するには、以下のように入力します。
    ls | xargs  -p  -n  1 ar r lib.a
    このコマンド・シーケンスによって、ライブラリー lib.a に追加するファイルを選択できます -p フラグは、xargs コマンドに対して、作成する各 ar コマンドを表示し、実行したいかどうかを尋ねるプロンプトを表示するように指示します。 コマンドを実行するには、y を入力します。 コマンドを実行しない場合は、それ以外の任意のキーを押します。

    以下のような画面が表示されます。

    ar r lib.a chap1 ?...
    ar r lib.a chap2 ?...
    ar r lib.a chap3 ?... 
  5. 特定の数の引数が入ったコマンドを作成したり、それらの引数をコマンド・ラインの中に挿入するには、以下のように入力します。
    ls | xargs -n6 | xargs -I{} echo {} - some files in the directory
    現行ディレクトリーにファイル chap1 から chap10 が入っている場合は、以下のように出力されます。
    chap1 chap2 chap3 chap4 chap5 chap6 - some files in the directory
    chap7 chap8 chap9 chap10 - some files in the directory

ファイル

項目 説明
/usr/bin/xargs xargs コマンドが入っています。