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 コマンドはしばしばたくさんのシェルのバッククォート機能と同じ機能を持っている。しかし、より柔軟で、入力に空白や特殊文字を含む場合にはしばしばより安全でもある。