bash gunzip | 将多个文件解压到单独的文件夹中

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

但是我怎样才能循环解压所有内容呢?

答案1

您可以尝试这个(在 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 档案,然后从其名称中取出“日期”部分,创建所需的目录并最终提取它们。

答案2

使用atool(1). 它已经针对许多发行版进行了打包。

赶紧跑:

$ atool -x -e *.tar.gz

将每个文件解压并解压到各自的目录中。

答案3

你可以像这样简单地循环遍历文件

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

相关内容