UNIX系OSで使う。
標準入力から渡された情報を区切り文字で分割し、オプションとして指定されたコマンドのコマンドライン引数として渡すコマンド。
/path/to/sample.txt aaa bbb ccc
$ cat /path/to/sample.txt | xargs echo aaa bbb ccc
xargsコマンドをそのまま使うと、xargsの後ろに指定したコマンドの最後のコマンドライン引数としてコマンドに引き渡される。
実行するコマンドの最後尾以外の場所に値を引き渡す場合は、-Iオプションを使用する。
/path/to/sample.txt test1 test2 test3
$ cat /path/to/sample.txt | xargs echo AAA BBB AAA BBB test1 AAA BBB test2 AAA BBB test3 $ cat /path/to/sample.txt | xargs -I echo AAA {} BBB AAA test1 BBB AAA test2 BBB AAA test3 BBB
-Iオプションのデフォルトの展開先指定文字は{}を使う。ダブルクォートで括ると無効になるので注意。
また、{}以外の文字列で指定したい場合は-I “STR”のように指定し、xargsの後ろのコマンドに“STR”を挿入する。
また、xargsのバージョンなのか、Linuxディストリビューションなのか、環境によって-Iではなく-iの場合もあるので注意する。
xargsはそのまま実行すると、とりあえず引数を1つずつ渡す。
これを2つ以上ずつ渡す場合は-n 'N'オプションを使用する。
/path/to/sample.txt test1 test2 test3 test4
$ cat /path/to/sample.txt | xargs -n 2 echo Output = Output = test1 test2 Output = test3 test4
-nオプションは-iオプションとの併用は出来ない。
findコマンドでファイルリストをxargsに渡す際、空白文字を含むと、異なる引数として分割されてしまう。
これを回避する場合、findコマンドの出力する区切りを0(null)にし、それをxargs側の区切り文字として設定する
$ find . -type f -print0 | xargs -0 command