xargs を使って tar で複数ファイルを解凍する
移転しました。
複数ファイルをfindで取得してtarで解凍しようとおもったらうまくいかない
find . -name "*.gz" | xargs tar xf
どうやらtarは複数ファイルを受け付けないため、上記ではうまくいかない。
以下のようにすると複数ファイルが解凍できるようになった。
find . -name "*.tar.gz" -print0 | xargs -0 -n1 tar xf
ちなみにオプションの意味
find
-print0
真を返す。ファイル名をフルパスで標準出力に表示し、各ファイル名に ヌル文字を付加する。このオプションを用いれば、 find の出力を処理 するプログラムにおいて改行文字を含んだファイル名を正しく解釈でき るようになる。
xargs
--null, -0
標準入力からの文字列の区切りに、空白ではなくヌル文字が使われてい るとみなす。また引用符やバックスラッシュに特別の意味を持たせず、 すべての文字をそのまま用いる。ファイル終了文字列も無効となり、他 の文字列と同じように扱われる。入力される文字列に空白・引用符・バ ックスラッシュが含まれている場合に有用であろう。 GNU find の -print0 オプションの出力を、このオプションを指定した xargs の入 力とすると良い。
--max-args=max-args, -n max-args
コマンドラインあたり最大 max-args 個の文字列が用いられる。もし サイズが超過した場合には (-s オプションの項を見よ)、 max-args 以下の文字列が用いられることになる。ただしこれは -x オプション が指定されていない場合で、指定されている場合には xargs 自身が実行を終了する。