如何在不扩展 tars 和 gzip 的情况下评估它们的有效性?

如何在不扩展 tars 和 gzip 的情况下评估它们的有效性?

很久以前,我为我们的网站编写了一个备份脚本,并从那时起就对其进行了更新。然而,偶尔会出现问题,一些较旧的备份现在已损坏。

过去,我曾zipinfo在自动化脚本中使用该实用程序来尝试找出以前的备份是否损坏,然后重新尝试备份,但虽然我们仍然有一些zip备份,但(至少)存在两个问题。

首先,zip有根本的限制,因此我们用于tar更大的备份。

其次,zip它捕获的元数据不如它那么多tar,因此我们更喜欢它来处理某些类型的事情。

此外,我们已经转向gzip而不是zip,并且我们也在压缩我们的tars......

我们的备份现在很大,我正在尝试找出要删除的内容和要保留的内容 - 保留损坏的文件没有意义。因此,我正在编写一个脚本来合并我们的各种备份目录(来自现场和异地等),并且我觉得非常需要检查每个文件的有效性,因为有时一个副本已损坏,而另一个副本则正常。

我找了一个gzip版本,zipinfo但没有找到。我从来没有听说过这样的事情tar,但我可能只是无知!

我当然不想诉诸于扩展磁盘空间!

答案1

关于gzip

(这适用于gztgztz文件。)

注意到 是zipinfo基于 的unzip,我进行了gzip更彻底的调查,发现虽然没有直接等同于 的组合zipinfo -t,但有一个与 类似的组合gunzip

# gunzip -t -v [file-specification(s)]
[file-specification]: OK

但请注意,所需的输出被发送到stderr而不是stdout!此外,输出冒号和“确定”之间有一个选项卡,因此请相应地调整脚本。

关于tar

正如上面评论中所指出的,我同样发现虽然 tar 没有我们想要的检查,但tar -t它是一个“总比没有好”解决方案的合理开始。

与 一样gunzip,确认输出来自stderr,而不是stdout,尽管两个输出流都可以/很有用,具体取决于您的具体子目标。

严格来说,Fedora 38 的当前版本的 tar 抱怨:

这看起来不像 tar 存档

...如果存档无效。也就是说,仅仅因为 tar 中没有可感知的文件并不意味着它一定是无效的,它可能只是一开始就没有正确构建。因此,有些人可能会认为这是无效的存档! YMMV。

相关内容