同じ内部フォルダ構造の.tar.gzファイルのリストがあり、gunzipをバッチ処理したい|別々のフォルダにあるそれらから単一のファイルを解凍します。
logs_2013-08-01.tar.gz
logs_2013-08-02.tar.gz
logs_2013-08-03.tar.gz
logs_2013-08-04.tar.gz
logs_2013-08-05.tar.gz
単一のファイルを解凍するコマンドは
tar -xvf {tarball.tar} {path/to/file}
また、-Cを追加して出力フォルダーを指定すると、単一のアーカイブのコマンドは次のようになります。
tar -xvf logs_2013-08-01.tar.gz -C 2013-08-01/ /var/logs/audit
しかし、どうすればすべてを解凍するためのループを実行できますか?
これを試すことができます(Linux/bashでテスト済み):
for pkg in logs_*.tar.gz; do
where="${pkg#logs_}"
where="${where%.tar.gz}/"
[ -d "$where" ] || mkdir "$where"
tar zxfv $pkg -C "$where" /var/logs/audit
done
単純に、現在のディレクトリ内のすべてのtgzアーカイブをループし、その名前から「日付」の部分を取得し、必要なディレクトリを作成して、最後にそれらを抽出します。
atool(1)
を使用します。すでに多くのディストリビューション向けにパッケージ化されています。
ただ走れ:
$ atool -x -e *.tar.gz
独自のディレクトリ内のすべてのファイルを解凍および解凍します。
このようにファイルをループするだけです
#!/bin/bash
# Pass the name of the file to unpack on the command line $1
for file in *.gz
do
dir=$(echo "$file" | cut -c 6-15)
tar -xvf "$file" -C "$dir" "$1"
done