Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

xargs(1)

名前

xargs - 引数リストを構築してコマンドを実行

形式

xargs [-t] [-p] [
-e[eofstr]] [-E 
eofstr] 
     [-I replstr] [-i[
replstr]] [-L number] [
-l[number]] 
     [-n number [-x]] [
-s size] [utility [
argument...]]

説明

xargs ユーティリティーは、オペランドで指定された utilityargument からなり、その後にいくつかの引数を伴ったコマンド行を生成します。付加する引数は、標準入力から読み込んだものがその順序どおりに与えられます。ただしその長さや数は、オプションで指定した値を超えることはありません。コマンド行を生成したら、xargs ユーティリティーはそのコマンドを実行して、完了を待ちます。この一連の処理は、標準入力上でファイルの終わりが検出されるまで、あるいは実行したコマンドが終了ステータス 255 で終了するまで繰り返されます。

標準入力から読み込まれる引数は、引用符で囲まれていない空白文字、エスケープされていない空白文字、もしくは復帰改行文字で 区切られていなければなりません。0 個以上の、二重引用符 (") および復帰改行以外の文字からなる文字列は、二重引用符で囲むことができます。0 個以上の、アポストロフィ (') および復帰改行以外の文字からなる文字列は、アポストロフィで囲むことができます。また引用符でかこまれていない文字は、いずれもバックスラッシュ (\) を先頭に付加することによりエスケープできます。utility で指定したユーティリティーは、ファイルの終わりが検出されるまで、繰り返して実行されます。そのユーティリティーが標準入力からデータを読み込もうとした場合、処理の結果は不確定です。

生成したコマンド行の長さは、ユーティリティー名のバイト長と文字列として認識された各引数のバイト長の合計となります。文字列の終端用の NULL 文字も含まれます。xargs ユーティリティーは、生成したコマンドを呼び出すときに、引数と環境リストをまとめた長さが {ARG_MAX}–2048 バイトを超えないよう、コマンド行の長さを制限します。この制限範囲の中で、–n–s の両オプションがともに省略された場合、デフォルトのコマンド行の長さの最小値は {LINE_MAX} となります。

オプション

サポートしているオプションは、次のとおりです。

–0

入力項目は、スペースまたは復帰改行ではなく NULL 文字で終了します。引用符とバックスラッシュは特殊文字ではなく、すべての文字は文字どおりに扱われます。ファイルの終わりを表す文字列も無効にされ、その他の引数と同じように扱われます。これは、入力項目にスペース、引用符、またはバックスラッシュが含まれている可能性がある場合に便利です。find の –print0 オプションでは、このモードに適した入力が生成されます。

–e[eofstr]

論理的なファイルの終わり (EOF) を表す文字列を eofstr で指定します。この –e オプションを省略し、さらに –E も省略すると、デフォルトとして下線 (_) が論理的 EOF 文字列となります。また e だけを記述して eofstrを省略すると、論理的 EOF 文字列機能は無効となり、下線はそのまま引数の値の一部とみなされます。xargs の標準入力からの読み込みは、ファイルの終わりに達するか、eofstr が示す文字列が現れた時点で終了します。

–E eofstr

論理的 EOF 文字列として、デフォルトの下線の代わりに eofstr で示す文字列を使用します。xargs の標準入力からの読み込みは、ファイルの終わりに達するか、eofstr が示す文字列が現れた時点で終了します。eofstr がヌル文字列の場合、論理的なファイルの終わり (EOF) を表す文字列の機能が無効になり、下線文字はそのまま引数の値の一部と見なされます。

–I replstr

挿入モードを表します。標準入力から読み込んだ各行に対して utility で指定したユーティリティーが実行されます。このとき、読み込んだ行全体を 1 つの引数と見なし、replstr が示す文字列が argument s 中に含まれていればその位置に読み込んだ行の内容を挿入します。argument で指定する引数のうち、最大 5 つの引数に replstr を 1 つまたは複数個含めることができます。標準入力からの行の先頭が空白文字の場合、それらは無視されます。挿入によって生成される引数の合計長は、255 バイトを超えることはできません。この –I オプションを指定した場合は、xオプションが強制的に有効となります。–I–i は相互に排他的なオプションで、両方が指定された場合には最後に現れた方が有効です。

–i[replstr]

このオプションは –I replstr と同等の意味を持ちます。引数の replstr を省略すると、デフォルトの文字列として { } が用いられます。

–L number

number で示す数の引数行 (空の行を除く) を標準入力から読み込むたびに、utility を実行します。最後の呼び出し時、標準入力に残っている行数が number より少なくても、その引数で utility を実行します。各行は、その行で最初に現れた復帰改行をもって終わりと見なされます。ただし行の最後の文字が空白文字の場合、次の空ではない行に継続することになります。–L–l–nの 3 つのオプションは相互に排他的で、 2 つ以上が指定された場合には最後に現れたものが有効です。

-l[number]

(小文字のエル)このオプションは、–L number と同等の意味を持ちます。number を省略すると、1 とみなされます。この –I オプションを指定した場合は、xオプションが強制的に有効となります。

–n number

できるだけ多くの、ただし最大 number 個の引数を標準入力から読み込んで utility を呼び出します。number は正の 10 進整数です。次の場合は、より少ない引数が使用されます。

  • コマンド行の累積長が、–s オプションで指定された長さ (–sオプション省略時には LINE_MAX が示す長さ) を超えた場合。

  • 繰り返し実行の最終回に、残っている引数の数が number 未満でゼロではない場合

–p

プロンプトモードを表します。utility を呼び出すたびに、実行してもよいかどうかユーザーに問い合わせます。トレースモード (–t) が自動的に有効となってその回のコマンド内容を表示し、その後にプロンプトメッセージが表示されます。この表示は標準エラー出力に現れます。/dev/tty から肯定の応答 (ユーザーのロケールに固有) を読み取るとコマンドを実行し、肯定の応答でない場合はその回の utility の実行は行われません。

–s size

コマンド行の長さが size で示すバイト数を超えない範囲で、できるだけ多くの引数を標準入力から読み込んで utility を呼び出します。size は正の 10 進整数です。次の場合は、より少ない引数が使用されます。

  • 引数の合計個数が –n オプションで指定した数を超えた場合

  • 行数が –L オプションで指定した値を超えた場合

  • 行の長さが size バイトに到達する前にファイルの終わりを検出した場合

「機能説明」節で記述されている制限が満たされている場合は、size の値としては、少なくとも {LINE_MAX} バイトまでの値がサポートされます。その制限値を超えたり、システムがサポートしている最大値を超えたりした場合でも、エラーとは見なされません。そのような場合 xargs は、制限の範囲内で、サポートできる最大値を使用します。

–t

トレースモードを有効にします。生成されたコマンド行は、実行する直前に標準エラー出力に書き込まれます。

–x

引数の数を表す number 引数 (–n オプションを参照) あるいは行数を表す number 引数 (–L オプションを参照) を含むコマンド行が、明に指定された長さ (–s オプションを参照) あるいは暗に指定された長さを超えた場合、実行を中止します。

オペランド

次のオペランドがサポートされています。

utility

実行するユーティリティーの名前。環境変数 PATH を使った検索パスにより得られます (environ(5) を参照)。utility を省略すると、デフォルトとして echo(1)ユーティリティーが実行されます。shell_builtins(1) に定義されている特殊な組み込みユーティリティーの名前を utility で指定した場合の処理結果は定義されていません。

argument

utility を実行するときの最初のオプションまたはオペランド。

使用法

xargs から実行されるユーティリティーは、再度呼び出されても現データストリームを使うかぎり実行は失敗する、ということがわかっている場合、終了ステータス 255 を使用して xargs に対し実行を終了するよう通知できます。したがって utility は、偶然 255 を返すことのないよう、適切な終了コード値を明に指定して実行を終了することが必要です。

入力データは行の集まりとして解析されます。引数は空白文字により区切られます。xargs を使って find dir –printls などのコマンドの出力を、実行対象コマンドの入力とする場合、ファイル名に空白文字や復帰改行文字が含まれていると、処理の結果は予測できません。これを防ぐには、見つかった各ファイル名を引用符つきの文字列に変換するスクリプトを find を使って呼び出し、そのスクリプトを xargs にパイプでつなげるようにしてください。なお xargs が使う引用符の規則は、シェルの規則とは異なります。同じ規則を採用しないのは、既存のアプリケーションが現状の規則に 依存しているのに対し、シェルの構文規則は それと互換性を持たないためです。文字列を xargs が正しく解釈できる形式に変換する簡単な方法は、各文字の前にバックスラッシュ (\) を付加することです。

{ARG_MAX} 値が大きいシステムにおいては、xargs{LINE_MAX} より長いコマンド行を生成することがあります。これはユーティリティーを呼び出すうえでは問題ではありません。xargs を使ってテキストファイルを作成する場合、ユーザーは –s オプションを使ってコマンド行の長さを明確に設定しなけばなりません。

エラーが発生した場合は、「ユーティリティーの検出に失敗した」のか「呼び出されたユーティリティーがエラーを示して終了した」のかをアプリケーションが区別できるようにするため、xargs ユーティリティーは終了ステータス 127 を返します。値 127 が選ばれたのは、通常、これはほかの意味では使用されないためです。ほとんどのユーティリティーは、小さい値を使って「一般的なエラー状態」を表し、また 128 より大きな値は、シグナル受信による終了の場合と区別が困難になりかねません。同じような観点から、ユーティリティーは見つかったが実行できなかった、という場合に使う値として 126 が選ばれています。

使用例 1 xargs コマンドの使用

次の例では、ディレクトリ $1 中の全ファイルをディレクトリ $2 へ mv コマンドで移動することとと、各実行の直前にそのコマンドの内容を表示することを指定しています。

example% ls $1 | xargs -I {} -t mv $1/{} $2/{}

次では、カッコで囲まれたコマンドの実行結果を 1 行にまとめ、それを log というファイルの終わりに追加出力することを指定しています。

example% (logname; date; printf "%s\n" "$0 $*") | xargs >>log

次のコマンドは、元来コマンド行引数として入力されたいくつかの対の引数を使って diff を実行します。なお元の引数リストの各要素には空白文字が埋め込まれていない、と仮定しています。

example% printf "%s\n" "$*" | xargs -n 2 -x diff

ユーザーは、現在のディレクトリに含まれるファイルのうち、どのファイルのアーカイブを作成するかを確認されます。ファイルのアーカイブが作成されて arch ; に渡されます (a: 1 度に 1 ファイルずつ、b: 1 度に複数のファイル)。

example% ls | xargs -p -L 1 ar -r arch
ls | xargs -p -L 1 | xargs ar -r arch

次のコマンドは、元来コマンド行引数として入力されたいくつかの対の引数を使って diff コマンドを実行します。

example% echo $* | xargs -n 2 diff

環境変数

xargs の実行に影響を与える次の環境変数についての詳細は、environ(5)を参照してください。LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES、および NLSPATH。

PATH

utility の位置を指定します。

肯定応答は、ユーザーのロケールの LC_MESSAGES カテゴリの yesexpr キーワードで定義されている拡張正規表現を使用して処理されます。LC_COLLATE カテゴリに指定されているロケールは、yesexpr に定義されている式に使用される範囲、同等クラス、および複数文字照合要素の動作を定義します。LC_CTYPE に指定されているロケールは、テキストデータのバイト列を文字として解釈するロケールや、yesexpr に定義されている式に使用される文字クラスの動作を定義します。locale(5) を参照してください。

終了ステータス

次の終了ステータスが返されます。

0

utility で指定したユーティリティーのすべての実行の終了ステータスは 0 だった。

1-125

指定された要求に合うコマンド行が生成できなかった、または utility で指定されたユーティリティーのうちいくつかの実行で 0 でない終了ステータスが返されました。またはほかの何らかのエラーが発生しました。

126

utility で指定されたユーティリティーが見つかったが実行できなかった。

127

utility で指定されたユーティリティーが見つからなかった。

指定された要求に合うコマンド行が生成できない、またはユーティリティーが実行できない、またはユーティリティーの実行がシグナルにより中断した、またはユーティリティーの実行が終了ステータス 255 で終了した場合、xargs ユーティリティーは診断メッセージを出力し、残りの入力データを処理することなく終了します。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
CSI
有効
インタフェースの安定性
確実
標準
standards(5) を参照してください。

関連項目

echo(1), shell_builtins(1), attributes(5), environ(5), standards(5)