很久以前,我为我们的网站编写了一个备份脚本,并从那时起就对其进行了更新。然而,偶尔会出现问题,一些较旧的备份现在已损坏。
过去,我曾zipinfo
在自动化脚本中使用该实用程序来尝试确定以前的备份是否损坏,然后重新尝试备份,但虽然我们仍然有一些备份,但(zip
至少)存在两个问题。
首先,zip
有根本的限制,因此我们用于tar
更大的备份。
其次,zip
它捕获的元数据不如它那么多tar
,因此我们更喜欢它来处理某些类型的事情。
此外,我们已经转向gzip
而不是zip
,并且我们也在压缩我们的tars
......
我们的备份现在很大,我正在尝试找出要删除的内容和要保留的内容 - 保留损坏的文件没有意义。因此,我正在编写一个脚本来合并我们的各种备份目录(来自现场和异地等),并且我觉得非常需要检查每个文件的有效性,因为有时一个副本已损坏,而另一个副本则正常。
我找了一个gzip
版本zipinfo
,但没有找到。我从来没有听说过这样的事情tar
,但我可能只是无知!
我当然不想诉诸于扩展磁盘空间!
关于
gzip
:(这适用于
gz
、tgz
和tz
文件。)注意到 是
zipinfo
基于 的unzip
,我进行了gzip
更彻底的调查,发现虽然没有直接等同于 的组合zipinfo -t
,但有一个与 类似的组合gunzip
:但请注意,所需的输出被发送到
stderr
而不是stdout
!此外,输出冒号和“确定”之间有一个选项卡,因此请相应地调整脚本。关于
tar
:正如上面评论中所指出的,我同样发现虽然 tar 没有我们想要的检查,但它
tar -t
是一个“总比没有好”解决方案的合理开始。与 一样
gunzip
,确认输出来自stderr
,而不是stdout
,尽管两个输出流都可以/很有用,具体取决于您的具体子目标。严格来说,Fedora 38 的当前版本的 tar 抱怨:
...如果存档无效。也就是说,仅仅因为 tar 中没有可感知的文件并不意味着它一定是无效的,它可能只是一开始就没有正确构建。因此,有些人可能会认为这是无效的存档!YMMV。