如何提取多次压缩的 tar 文件

如何提取多次压缩的 tar 文件

由于一些失控的糟糕脚本,一些原本要存档的文件被压缩了五六次。因此有这样的文件:

a_log_file_0.log.1.tar.gz.tar.gz.tar.gz.tar.gz.tar.gz

请问我该如何修复此类有问题的文件?

答案1

您必须解开已应用于您的文件的所有级别的 tar。如果你的文件是由类似的东西创建的

tar czf a_log_file_0.log.1.tar.gz a_log_file_0.log.1
tar czf a_log_file_0.log.1.tar.gz.tar.gz a_log_file_0.log.1.tar.gz
... 

你可以像这样一步一步地解压它:

tar xzf a_log_file_0.log.1.tar.gz.tar.gz.tar.gz.tar.gz.tar.gz
tar xzf a_log_file_0.log.1.tar.gz.tar.gz.tar.gz.tar.gz
tar xzf a_log_file_0.log.1.tar.gz.tar.gz.tar.gz
---

您可能需要确保 tar.gz 文件不包含其他可能因被放到tar错误位置而毁坏您的系统的内容,甚至可能覆盖重要数据。

您可能需要确保有足够的磁盘空间来提取多级 tar 文件。

您可能需要删除文件的中间提取版本。

如果你已经手动为几个这样的 tar 文件做过同样的操作,而且如果如果你确定每个 gzip 压缩的 tar 档案中只有一个文件,那么你可能想要像这样自动进行多级提取:

file=a_log_file_0.log.1.tar.gz.tar.gz.tar.gz.tar.gz.tar.gz
cp $file /tmp/
cd /tmp/
while echo $file | grep -n \\.tar\\..gz
do
  zfile=${file%.tar.gz}
  tar xzf $file
  rm $file
  file=$zfile;
done

如果名称与这个简短脚本中的名称意外不同,它将不起作用 - 这是故意的,因为多个 tar 档案结构不是预期的方式。

祝您提取愉快!

相关内容