xargsコマンド - 標準入力の行出力をコマンドライン引数に変換してプログラム実行
xargsコマンドは、標準入力の行出力をコマンドライン引数に変換してプログラムを実行してくれます。
行出力するコマンド | xargs プログラム
行出力するコマンドは、なんでも構いませんが、findコマンドや、grepコマンドで「-rl」を指定した場合が想定されます。
find * | xargs プログラム grep -rl 'こんにちは' dir | xargs プログラム
一つの例として、findコマンドの出力を見てみましょう。templates/blogの中のファイル名を取得します。
find templates/blog
出力結果です。
templates/blog/20190421171737.html templates/blog/20190103171737.html templates/blog/20190127171737.html templates/blog/20190212171737.html templates/blog/20200520082545.html templates/blog/20190309171737.html templates/blog/20191205081119.html templates/blog/20191218072611.html
このファイル名の一覧を、他のプログラムのコマンドライン引数に渡したいときが、xargsを使う場面です。
たとえば、Perlを使って、置換を行う場合を考えてみましょう。
上記のファイルに対して、「こんにちは」を「こんばんわ」に置換します。xargsコマンドを使って次のように書きます。
find templates/blog | xargs perl -pi -e 's/こんにちは/こんばんわ/g'