xargs
xargs(エックスアーグズ)は、UNIX 系オペレーティングシステムに用意されているコマンドで、標準入力を読み込み、それを引数として指定したコマンドを実行する。
概要
編集xargs
は、改行等で区切られた標準入力を読み込み、空白で区切られた1行の文字列へ加工し、それを引数として指定したコマンドへ渡して実行させる。
% (echo Bravo.txt ; echo Charlie.txt) | xargs -- chmod a-x Alpha.txt
というコマンドは次のものと等価である。
% chmod a-x Alpha.txt Bravo.txt Charlie.txt
上記の例は echo
で生成させたファイルパスを xargs
に与えるものだが、find
コマンドで階層的に検索して取得したファイルパスを xargs
に与えることもできる。
% find path -type f -name '*.txt' | xargs -- chmod a-x
ただし、find
コマンドが出力するファイルパスのリストはとても長くなる場合がある。xargs
コマンドが内部的に発生させる chmod
コマンドの1行が長すぎることになり、chmod
コマンド実行失敗する。
find
コマンドが例えば200個のファイルパスを出力した場合、xargs
が内部的に生成する chmod
コマンドの1行はこんな感じになる。
% chmod a-x filepath1 filepath2 … filepath200
この場合、xargs
が内部的に生成した chmod
コマンドを実行することは出来ないかもしれない。
ただし、発生させるコマンドがこの例のように chmod
コマンドであれば、内部的に発生させるコマンドの長さを調整する機能を用いることで回避できるだろう。
% find path -type f -name '*.txt' | xargs -n 3 -- chmod a-x
この例では、xargs
は find
コマンドが出力した200個のファイルパスを3個ごとに(3個に満たない場合はその個数だけで)chmod
を呼び出す。
% chmod a-x filepath1 filepath2 filepath3 % chmod a-x filepath4 filepath5 filepath6 : % chmod a-x filepath199 filepath200
もとのコマンドとは異なりはするが、find
が出力したファイルを全部のパーミッションを変更するという目的は果たせる。
ただ、このような方法が使えるかどうかは内部的に発生させるコマンド次第である。chmod
でなく、例えば tar
コマンドの場合は使えない。
xargs
コマンドはしばしばたくさんのシェルのバッククォート機能と同じ機能を持っている。しかし、より柔軟で、入力に空白や特殊文字を含む場合にはしばしばより安全でもある。
脚注
編集関連項目
編集外部リンク
編集- Manpage of XARGS GNU 版。JM Project
- xargs(1) man page(SunOS リファレンスマニュアル)