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

Chr*_*ris 34 bash tar

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

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

And*_*ese 44

如果tar在其输入中发现错误,它将exit(3)以非零退出值 ¹。这 - 对于大多数tar实现 - 在列出带有t. 因此,您可以简单地检查 的退出值tar以确定是否出现问题:

if ! tar tf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi
Run Code Online (Sandbox Code Playgroud)

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

if ! tar xOf /root/archive.tar &> /dev/null; then
    write_an_email_to_root
fi
Run Code Online (Sandbox Code Playgroud)

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