xargs - 引数リストを組み立ててコマンドを実行する

形式

xargs [–I placeholder] [–i [placeholder]] [–L number] [–l [number]] [–n number] [–ptx] [–E [eofstr]] [–e [eofstr]] [–s size] [command [argument …]]

説明

xargs コマンド行には、通常、別のコマンドのスケルトン、つまりテンプレート が含まれています。 このテンプレートは、いくつかの引数が欠けていることを除いて、普通のコマンドと似ています。 xargs は、標準入力 (stdin) から引数を追加してコマンドを完成し、そのコマンドを実行します。まだ入力が残っている場合、このプロセスを繰り返します。

2 バイト・ロケールでは、いくつかのオプションは 2 バイト・ストリングを引数として受け入れます。このような場合、マルチバイト・ストリングに誤りがあると、コマンド行の構文解析中に検出されます。

制約事項: 組み立てられたコマンドの 最大長は、LINE_MAX バイトです。

オプション

xargs は、必要とする引数を標準入力 (stdin) から取得します。これらの引数を取得するために、標準入力を解釈する方法を示す いくつかのオプションがあります。
–I placeholder
標準入力 (stdin) の各行は、 単一の引数として扱われます。–I に続く placeholder は、コマンド・テンプレートに 複数回現れるストリングです。xargs は、入力行の先行ホワイト・スペース文字を取り去り、それを placeholder ストリングに挿入します。例えば、
xargs –I '{}' mv dir1/'{}' dir2/ '{}'

標準入力は、dir1 から dir2 に移動 させたいファイルの名前のある行で構成されている必要があります。xargs は、コマンド・テンプレート内の {} プレースホルダーの各位置 にこれらの名前を代入します。

xargs がテンプレート・コマンドの引数を作成する場合、入力がプレースホルダーを置き換えた後は、どの引数も 255 文字より長くすることはできません。 –x オプションは、 –I または –i を使用した場合は 自動的に有効になります。placeholder ストリングを省略 すると、デフォルトのストリングは { } になります。したがって、上記の例は、以下のように書くこともできます。
xargs –i mv dir1/ '{}' dir2/ '{}'

2 バイト・ロケールでは、placeholder は 2 バイト文字を含むことができます。

–i placeholder
placeholder がオプショナルである点を除いて、–I のように動作します。placeholder ストリングを省略 すると、デフォルトのストリングは { } になります。したがって、前の例は 次のように書くこともできます。
xargs –i mv dir1/ '{{ ' dir2/'{ } '
xargs –i /{}/ mv dir1/ '{}' dir2/ '{}
–L number
xargs は、標準入力から number 行を読み取り、それらを 1 つの長ストリングに連結します (元の各行はブランクで区切られます)。xargs は次に、このストリングをコマンド・テンプレートに追加し、その結果できたコマンドを実行します。このプロセスは、xargs が 標準入力の終わりに到達するまで繰り返されます。ファイルの残りの行が number 行より 少ない場合、xargs は残りの行を 使用します。

このオプションでは、各行に 1 つ以上の非ブランク文字が入っている必要が あります。ブランク行はスキップされ、テンプレートに追加される行数にはカウントされません。xargs は、行の最終文字がブランクかタブでないかぎり、最初の改行文字で行が終了すると 判断します。この場合、現在行は次の空でない行の終わりまで続いているものとみなされます。

–L または –l オプションを省略すると、 標準入力から読み取られるデフォルトの行数は 1 になります。 –x オプションは、 –l を使用した場合は自動的に有効になります。

–l number
–L オプションと同じように機能しますが、number 引数は オプショナルです。number のデフォルトは 1 です。
–n number
xargs は、指定された数の引数を標準入力から読み 取り、コマンド・テンプレートの終わりに入れます。以下に例を示します。
xargs –n 2 diff

この例では、 標準入力から 2 つの引数を取得し、それらを diff コマンドの終わりに付加して そのコマンドを実行します。このプロセスは、標準入力に引数が なくなるまで繰り返されます。このオプションを使用する場合、xargs は、引数が互いにホワイト・スペース文字 (ブランク、水平タブ、または改行) で区切られた文字の ストリングであると想定します。空の行は常にスキップされます (すなわち、引数としてカウントされません)。入力引数に ブランクまたは水平タブを入れる場合は、二重引用符または単一引用符で囲んでください。引数に二重引用符 文字 (") が入っている場合、引数を単一引用符で囲む必要があります。逆に、引数に単一引用符 (') (またはアポストロフィ) が入っている場合は、引数を二重引用符で囲む必要があります。また、円記号 (¥) を文字の前に付けて、その文字が持つ特殊な意味 (例えば、ホワイト・スペース、または引用符) を xargs に無視させることもできます。

xargs は、以下の場合 には、number 引数より少ない数を読み取ります。
  • 累積されたコマンド行の長さが 、–s オプション (または、–s を指定しなかった場合 は {LINE_MAX}) の指定する size を超える場合
  • 最後の反復が 1 以上だが、残りの引数が number より少ない場合

–n オプションを指定しない場合、標準入力から読み取られる引数 のデフォルトの数は 1 です。

一般に、xargs コマンドは、上記のオプションを 1 つだけ使用します。複数指定した場合、xargs は、コマンド行の最後に現れるものを使用します。コマンドに何もオプションがない場合、xargs は、内部バッファー がいっぱいになるまで入力の読み取りを続け、コマンド・テンプレートの終わりに引数を連結します。 バッファーがいっぱいになる と、xargs は結果としてのコマンドを実行し、それから新しいコマンドの組み立てを開始します。例えば、
ls | xargs echo
は、作業ディレクトリー内のファイルの名前を 1 つの長い行として出力します。 xargs をこのように起動した場合、すべての引数の全長は 、–s オプションで指定したサイズより小さくなければなりません。

コマンド行にコマンド・テンプレートが表れてこない場合、xargs は、デフォルトで echo を使用します。xargs がコマンドを実行する場合、ユーザーの検索規則を使用してコマンドを探します。これは、ユーザーがシェル・スクリプトを普通のプログラムと同様に実行できると いうことを意味しています。

実行したいコマンドは、ユーザーの検索パス $PATH になければ なりません。

xargs は、構成されたコマンドを実行できない場合、または 実行されたコマンドがゼロ以外の状況を返した場合、中途半端に終了します。

実行されたコマンドがシェル・プログラムの場合、偶然にゼロ以外の状況を戻すのを避けるため、exit コマンドを明示的に含んでいなければ なりません。詳細については、sh を参照してください。

以下のオプションは、3 つのメイン・オプションのいずれとも一緒に使用する ことができます。
–E [eofstr]
標準入力のファイルの終わりを表すために eofstr を定義します。以下に例を示します。
–E :::
この例では、xargs::: が (この後に入力ファイルが続いていたとしても) 標準入力の終わりを 表すことを知らせます。–E または –e オプションがない場合、単一下線 (_) が入力の終わりを示します。

2 バイト・ロケールでは、eofstr は 2 バイト文字を含むことができます。

–e [eofstr]
–E と同じ働きですが、eofstr 引数はオプショナルです。–eeofstr なしで指定すると、ファイルの終わりのマーカー・ストリングがないので、_ はマーカー・ストリングとしてではなく 文字どおりに解釈されます。xargs は、指定されたファイルの終わりマーカーか、または 実際のファイルの終わりに到達したときに、入力の読み取りを停止します。
–p
各コマンドの前にプロンプトを出します。このオプションは、–t オプションをオンにして、構成されたそれぞれのコマンドを実行前に見ることができるようにするためです。次に xargs?… を 表示してこのコマンドを実行するかどうかを聞きます。y で始まるストリングを入力すると、xargs は、表示されたようにコマンドを実行します。それ以外の場合、コマンドは実行されず、xargs は新しいコマンドを作ります。
–s size
引数リストの最大許容サイズを size バイト (size は整数) に設定します。size の値は、システム変数 LINE_MAX より小さいか、または等しくなければなりません。–s オプションを省略すると、引数リストのデフォルトの許容サイズは LINE_MAX になります。 引数リストの長さは、構成されたコマンド全体の長さになります。この長さは、コマンド名、各引数の長さ、それに行の各項目を区切るブランクを 1 つ加えた長さと等しくなります。
–t
構成されたそれぞれのコマンドを、コマンド実行の直前に stderr に書き込みます。
–x
このオプションは、–s オプション (または、–s の指定がない場合は {LINE_MAX}) に 指定されたサイズより長いコマンドが作成されると、xargs を取り止めます。このオプションは 、–i または –l を指定すると、自動的に有効になります。

以下の例では、ファイル名を 3 桁で表示します。
ls | xargs –n 3 echo

ローカライズ

xargs は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_CTYPE
  • LC_MESSAGES
  • LC_SYNTAX
  • NLSPATH

詳細については、ローカライズを参照してください。

終了値

0
すべてのコマンドが正常終了。
1–125
以下のいずれかによる失敗。
  • xargs がコマンド行をアセンブルできなかった
  • command の 1 つ以上の呼び出しによってゼロ以外の終了状況が戻された
  • 他のエラーが起きた
126
xargs は、command を見つけたが、それを呼び出せなかった
127
xargscommand を見つけられなかった

移植性

POSIX.2, X/Open 移植性ガイド, UNIX システム.

–e–E, –i, –I, –l, –L、および –p オプションは、POSIX 標準の拡張です。

関連情報

echofindsh