特定のディレクトリ内に存在する複数のtar.gzファイルを一括して解凍・展開したい場合のメモ。
xargsコマンドの"-n"オプションがポイント。(追記あり)
$ find ./ -type f -name "*.tar.gz" | xargs -n 1 tar zxf
tarコマンドは展開(抽出)の際に、同時に複数のファイルを引数に渡せないので、xargsコマンドの"-n"(--max-args)オプションを利用します。このオプションを使うと1コマンドにつき、最大でオプションにて指定した数だけ引数を使うようになります。↑の場合だと1個しか引数が渡らないようになるということです。
$ find ./ -type f -name "*.tar.gz" -print0 | xargs -0 -n 1 tar zxf
ちなみに厳密にちゃんと書くと↑な感じですかね。
追記
早速、ご指摘いただきました。
$ find ./ -type f -name "*.tar.gz" -exec tar zxf {} \;
確かに、find使うなら"-exec"使ったらいけますね。脳裏にはよぎったが、find -execの挙動をちゃんと理解していなかったぜ・・・。
つか、今見返したらこのエントリにfind -execの挙動の話を書いていたわ。お恥ずかしい。
@mirakuiさん、ご指摘ありがとうございます!
参考
--max-args=max-args
Man page of XARGS
-n max-args
1 コマンドラインにつき最大 max-args 個の引き数を使用する。作成されたコマンドラインが、コマンドライン長の上限を超過する場合は (-s オプション参照)、 max-args より少ない引き数が使用されることになる。ただし、 -x オプションが指定されているときは別で、その場合は xargs が終了する。