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'

関連情報