これまで、
find . -name '*.txt' | xargs grep xxx
とかで何気なく使っていた xargs だが、xargs が必要な場合とそうでない場合が自分の中で明確になっていなかったので、ここで簡単にまとめる。
xargs は、受け取った「標準入力」を「引数」に変える働きをする。なので、xargs が必要なケースというのは、これに続くコマンドが引数を求めている場合ということになる。
つまり、「A | (xargs) B」という感じで、Aコマンドの結果を Bコマンドに流す場合、Bコマンドが標準入力を求める場合は xargs は必要なく、Bコマンドが (標準入力ではなく) 引数を求める場合は xargs が必要ということになる。
また、xargs コマンドには、「-I」オプションを使って、
xargs -I@ echo '[@!!]'
といった感じで、xargs が受け取った情報を任意の変数 (この場合は @ ) に入れて、それを扱うことができる。これが便利。