在原地解压并删除 tar(或 tar.gz)文件

13

我有这段小代码:

for i in *.tar.gz; 
   do tar xzvf $i;
done && find . -name "*.tar.gz" -exec rm {} \; 

现在,当我有多个tar文件时,它会首先解压缩所有的tar文件,然后再删除它们。

我怎样修改代码才能够在解压缩一个文件后,将其删除并继续下一个tar文件?

谢谢提前。

2个回答

20
for file in *.tar.gz; do tar xzvf "${file}" && rm "${file}"; done

不要忘记引用你的变量,以考虑到带有空格的奇怪文件名。


嗨,那似乎解决了问题。非常感谢。你知道如何检查tar文件中的所有文件是否成功提取,然后再删除tar文件吗? - tljubas
4
&& 确保只有左边返回零退出代码(成功终止)时才会执行右边的命令,因此它应该只在一切顺利的情况下删除文件,在出错时 rm 命令将不会被执行。 - Adrian Frühwirth

2

只需更改操作顺序:

for i in *.tar.gz; do
  tar xzvf "$i" && rm -r "$i"
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接