bash gunzip | 解压多个文件在分离的文件夹中

我有一个.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上testing):

 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档案,然后从它的名字中取出“date”部分,创build所需的目录并最终提取它们。

使用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