目次

xargs-Tips

xargsって

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