很久以前,我为我们的网站编写了一个备份脚本,并从那时起就对其进行了更新。然而,偶尔会出现问题,一些较旧的备份现在已损坏。
过去,我曾zipinfo
在自动化脚本中使用该实用程序来尝试找出以前的备份是否损坏,然后重新尝试备份,但虽然我们仍然有一些zip
备份,但(至少)存在两个问题。
首先,zip
有根本的限制,因此我们用于tar
更大的备份。
其次,zip
它捕获的元数据不如它那么多tar
,因此我们更喜欢它来处理某些类型的事情。
此外,我们已经转向gzip
而不是zip
,并且我们也在压缩我们的tars
......
我们的备份现在很大,我正在尝试找出要删除的内容和要保留的内容 - 保留损坏的文件没有意义。因此,我正在编写一个脚本来合并我们的各种备份目录(来自现场和异地等),并且我觉得非常需要检查每个文件的有效性,因为有时一个副本已损坏,而另一个副本则正常。
我找了一个gzip
版本,zipinfo
但没有找到。我从来没有听说过这样的事情tar
,但我可能只是无知!
我当然不想诉诸于扩展磁盘空间!
答案1
关于gzip
:
(这适用于gz
、tgz
和tz
文件。)
注意到 是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。