xargs コマンド

目的

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

構文

引数 [P- T X ] [-e (E) [EOFストリング]] [-E (E) EOFストリング] [I [ReplaceString] ] [-I (I) ReplaceString | -L (L) 数値 | N 数値] [ - [ 数値]] [-s サイズ] [コマンド [引数 ... ]]

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

説明

生成されるコマンド・ラインの長さは、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 [番号] l (L の小文字)。 旧バージョンのフラグ。 -L フラグを使用します。

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

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

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

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

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

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

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

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

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

-p Command パラメーターを実行するかどうかを尋ねます。 構成されたコマンド行を表示し、その後に以下を表示します。?...(疑問符、省略符号) プロンプト。 Command パラメーターを実行するには、ロケールに固有の肯定応答を入力します。 他の応答を入力すると、 xargs コマンドはパラメーターの特定の呼び出しをスキップします。 呼び出しごとにプロンプトが表示されます。 -p フラグは、-t フラグもオンにします。
-s サイズ 作成される 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
    :NONE.cfilesファイルには以下のテキストが含まれます。
    main.c readit.c
    gettoken.c
    putobj.c
    xargs コマンドは以下のコマンドを作成して実行します。
    lint -a main.c readit.c gettoken.c putobj.c
    :NONE.cfilesファイルに含まれているファイル名の数が、単一のシェル・コマンド行に収まりきらない場合 ( LINE_MAXまで)、 xargs コマンドは、適合するファイル名を使用して 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.cおよびfltadd.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 コマンドは実行する前に各コマンドを表示するので、現在何をしているか見ることができます。 この<<EOFおよびEOFパターン・マッチング文字は、 here documentを定義します。これは、 xargs コマンドの標準入力として、終了行の前に入力されたテキストを使用します。
  3. コマンド行の中央にファイル名を挿入するには、次のように入力します。
    ls | xargs  -t  -I  {} mv {} {}.old
    このコマンド・シーケンスは、以下を追加することによって、現行ディレクトリー内のすべてのファイルを名前変更します。 .old各名前の末尾に移動します。 -I フラグは、xargs コマンドに対して、{} (中括弧) が表示される所に ls ディレクトリー・リストの各行を挿入するように指示します。 現行ディレクトリーにファイルが含まれている場合chap1,chap2およびchap3これにより、以下のコマンドが構成されます。
    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 コマンドを表示し、実行したいかどうかを尋ねるプロンプトを表示するように指示します。 タイプyto run the command. コマンドを実行しない場合は、それ以外の任意のキーを押します。

    以下のような結果が表示されます。

    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 コマンドが入っています。