web-dev-qa-db-ja.com

bashガンジップ|別々のフォルダにある複数のファイルを解凍します

同じ内部フォルダ構造の.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

しかし、どうすればすべてを解凍するためのループを実行できますか?

3
sergei

これを試すことができます(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アーカイブをループし、その名前から「日付」の部分を取得し、必要なディレクトリを作成して、最後にそれらを抽出します。

3
dsmsk80

atool(1) を使用します。すでに多くのディストリビューション向けにパッケージ化されています。

ただ走れ:

$ atool -x -e *.tar.gz

独自のディレクトリ内のすべてのファイルを解凍および解凍します。

3
dawud

このようにファイルをループするだけです

#!/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
2
user9517