複数のtarファイルを一気に展開する

特定のディレクトリ内に存在する複数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
-n max-args
1 コマンドラインにつき最大 max-args 個の引き数を使用する。作成されたコマンドラインが、コマンドライン長の上限を超過する場合は (-s オプション参照)、 max-args より少ない引き数が使用されることになる。ただし、 -x オプションが指定されているときは別で、その場合は xargs が終了する。

Man page of XARGS


Linuxの教科書 改訂版 (マイコミムック) (MYCOMムック)

Linuxの教科書 改訂版 (マイコミムック) (MYCOMムック)