コンテンツにスキップ

Xargsハンドブック

出典: フリー教科書『ウィキブックス(Wikibooks)』

xargsハンドブック

[編集]

概要

[編集]

xargs は、標準入力からのスペース、タブ、改行、またはEOFで区切られた文字列を読み込み、それらを引数として指定されたコマンドを実行するユーティリティです。複数行の入力をまとめてコマンドに渡したり、引数の個数やサイズを制限したり、並列処理を行うことができます。

構文

[編集]
xargs [-0oprt] [-E eofstr] [-I replstr [-R replacements] [-S replsize]]
 [-J replstr] [-L number] [-n number [-x]] [-P maxprocs] [-s size]
 [utility [argument ...]]

オプション

[編集]
  • -0
    標準入力の区切り文字としてNULL文字(\0)を使用します。通常は find コマンドの -print0 オプションと併用します。
  • -E eofstr
    指定した文字列を論理的なEOFとして扱います。
  • -I replstr
    入力の各行に対して、指定した文字列(replstr)を引数として渡す際にその文字列を置き換えます。
  • -J replstr
    replstr の最初の出現を置き換えます。置き換えたデータは、引数リストの先頭に配置されます。
  • -L number
    標準入力から number 行を読み込み、その数ごとにコマンドを実行します。
  • -n number
    1回の実行で渡す引数の最大数を指定します。引数の数が number より少ない場合もあります。
  • -P maxprocs
    最大で maxprocs 個のコマンドを並列に実行します。maxprocs0 に設定すると、可能な限り多くのプロセスを並列実行します。
  • -r
    標準入力が空の場合にはコマンドを実行しません。
  • -s size
    コマンドライン全体のサイズ制限を設定します。引数や環境変数を含めた総バイト数が指定された size を超えることはありません。
  • -t
    実行するコマンドを標準エラーに表示し、その後実行するかどうかを確認します。
  • -x
    コマンドラインが指定したサイズに収まらない場合、直ちに処理を終了します。

実行例

[編集]
  • 3x3の行列を作成する:
    $ seq 1 9 | xargs -L3 echo 1 2 3 4 5 6 7 8 9
    
  • 標準入力の各行を複製する:
    $ echo -e "one\ntwo\nthree" | xargs -I % echo % % one one two two three three
    
  • 最大2つの並列プロセスで find コマンドを実行する:
    $ echo -e "/usr/ports\n/etc\n/usr/local" | xargs -J % -P2 -n1 find % -name file
    

詳細

[編集]

xargs は入力データのサイズや引数数に応じてコマンドを分割して実行するため、大量のデータを効率的に処理する際に有用です。例えば、ファイル名のリストを取得した後にそれらのファイルを処理するために使用できます。また、並列処理を利用することで、処理時間を短縮することも可能です。

履歴

[編集]

xargs はPWB UNIXで初めて登場しました。

バグ

[編集]

xargs はマルチバイト文字に関して不正な結果を生じる可能性があります。また、引数や環境変数のサイズが制限を超えた場合、execvp(3) 呼び出しが失敗するリスクがあります。