我创建了一个脚本,它将提取所有*.tar.gz
文件。这个文件被解压了五次.tar.gz
文件,但问题是只有第一个 *.tar.gz 文件被解压。
for file in *.tar.gz; do
gunzip -c "$file" | tar xf -
done
rm -vf "$file"
我该怎么做?非常感谢答案。
如果您的问题是 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 的通配选项。
如果您的意思是它被压缩(未解压缩)五次,尽管有单个 .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