我有一个具有相同内部文件夹结构的 .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
答案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