Xargsハンドブック
表示
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
オプションと併用します。
- 標準入力の区切り文字としてNULL文字(
-E eofstr
- 指定した文字列を論理的なEOFとして扱います。
-I replstr
- 入力の各行に対して、指定した文字列(
replstr
)を引数として渡す際にその文字列を置き換えます。
- 入力の各行に対して、指定した文字列(
-J replstr
replstr
の最初の出現を置き換えます。置き換えたデータは、引数リストの先頭に配置されます。
-L number
- 標準入力から
number
行を読み込み、その数ごとにコマンドを実行します。
- 標準入力から
-n number
- 1回の実行で渡す引数の最大数を指定します。引数の数が
number
より少ない場合もあります。
- 1回の実行で渡す引数の最大数を指定します。引数の数が
-P maxprocs
- 最大で
maxprocs
個のコマンドを並列に実行します。maxprocs
を0
に設定すると、可能な限り多くのプロセスを並列実行します。
- 最大で
-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)
呼び出しが失敗するリスクがあります。