使用bash脚本提取文件

时间:2014-05-07 01:52:48

标签: bash loops tar gunzip

我创建了一个脚本,它将提取所有*.tar.gz文件。此文件被解压缩五次.tar.gz文件,但问题是只提取了第一个* .tar.gz文件。

for file in *.tar.gz; do
        gunzip -c "$file" | tar xf -
done
rm -vf "$file"

我应该怎么做?答案非常感谢。

1 个答案:

答案 0 :(得分:3)

如果你的问题是tar.gz文件包含另一个应该提取的tar.gz文件,你需要一个不同类型的循环。 for循环顶部的通配符仅在循环开始时计算,因此它不包含从tar.gz中提取的任何内容

您可以尝试类似

的内容
while true; do
    for f in *.tar.gz; do
        case $f in '*.tar.gz') exit 0;; esac
        tar zxf "$f"
        rm -v "$f"
    done
done

case取决于(默认情况下)没有文件与通配符匹配的事实,它仍然未展开。如果shell的globbing选项与默认选项不同,则可能需要更改它们。

如果你的意思是它被压缩(未解压缩)五次,尽管单个.gz扩展名,也许你需要改为

for i in 1 2 3 4; do
    gunzip file.tar.gz
    mv file.tar file.tar.gz
done
tar zxf file.tar.gz