在 bash 中测试 tar 文件的完整性

在 bash 中测试 tar 文件的完整性

我有一个创建“.tar”文件的 bash 脚本。文件创建后,我想测试其完整性,如果完整性不好,则向 root 用户发送电子邮件。

我知道我需要使用该命令tar -tf /root/archive.tar来检查文件的完整性,但是如何在 bash if 语句中实现此操作并检查错误?

答案1

如果tar在其输入中发现错误,它将exit(3)具有非零退出值。对于大多数tar实现来说,这也是在使用 .list 列出存档内容时完成的t。因此,您可以简单地检查 的退出值tar来确定是否出现问题:

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

如果您tar没有找到 的所有错误t,您仍然可以将存档提取到stdout并重定向stdout/dev/null,这将是较慢但更可靠的方法:

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi

1 此符号表示联机帮助页,而不是实际调用。看man 3 exit

答案2

抱歉,但你不能,似乎 tar 缺乏测试能力(例如,如果你忘记 *nix 并尝试使用 winrar 测试它,结果将是:“该命令不支持这种类型的存档”)

我在上面的评论中指出,tar 实际上缺乏内部 CRC 来进行比较,因此,如果您使用编辑器更改 tar 存档,列表和提取可能会完美无缺地工作,不会出现错误,但会提取损坏的数据

总之,我最终在这里希望找到一个解决方案,但没有一个,幸运的是有两个好消息:

有非常非常非常罕见的 tar 存档,它们也没有用另一个程序(如 gzip、bzip2 等)压缩,因此该程序将有一个测试解决方案,不压缩它们的人有点蹩脚,真的很蹩脚

对于我个人的问题,我很幸运,解压后,我只是找到了一个md5sum文件,里面有所有文件的CRC(即使是把arhive tar放在网上并且不想压缩它的人,他仍然想被可以验证)

答案3

您可以通过将以下参数传递给来做到这一点tar

$ tar -cvzf test.tar test_file

相关内容