我创建了一个脚本,它将提取所有*.tar.gz
文件。此文件被解压缩五次.tar.gz
文件,但问题是只提取了第一个* .tar.gz文件。
for file in *.tar.gz; do
gunzip -c "$file" | tar xf -
done
rm -vf "$file"
我应该怎么做?答案非常感谢。
答案 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