xargs とは
標準入力から渡されたファイル名などを引数とみなして、別のコマンドの引数として起動するというものです。
http://openlab.dino.co.jp/2008/02/20/133431188.html
というものらしい。
言葉だけではピンとこないので具体例で言うと、
% find . -type f | while read line do chmod g+w $line done
と同じことを xargs を使うと、
find . -type f | xargs chmod g+w
でできる。
[使用例]
% mkdir -p {a,b,c}/{1,2,3} % find . | xargs -I{} touch {}/hoge.txt % find . -type f | xargs ls -l -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./a/1/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./a/2/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./a/3/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./a/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./b/1/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./b/2/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./b/3/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./b/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./c/1/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./c/2/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./c/3/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./c/hoge.txt -rw-r--r-- 1 oracle oinstall 0 Aug 25 17:53 ./hoge.txt % find . -type f | xargs chmod g+w % find . -type f | xargs ls -l -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./a/1/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./a/2/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./a/3/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./a/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./b/1/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./b/2/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./b/3/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./b/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./c/1/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./c/2/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./c/3/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./c/hoge.txt -rw-rw-r-- 1 oracle oinstall 0 Aug 25 17:53 ./hoge.txt % find . -type f | xargs rm % find . . ./a ./a/1 ./a/2 ./a/3 ./b ./b/1 ./b/2 ./b/3 ./c ./c/1 ./c/2 ./c/3
[補足]
find . -type f -print0 | xargs -0 chmod g+w
のように find に -print0、xargs に -0 をつけないとスペースを含んだパスを扱えないらしいが、Solaris10 にはこれらのオプションがなかったので上の例ではつけていない。
[参考]
404 Blog Not Found:perl - the best friend of find(1)
http://openlab.dino.co.jp/2008/02/20/133431188.html
void GraphicWizardsLair( void ); // いまどきfindとxargsを使う時は-print0と-0を忘れずに
http://mr-goofy.blogspot.com/2009/05/xargs.html