Answers:
如果tar
在输入中发现错误,它将exit(3)
¹退出值不为零。使用tar
-列出存档内容时,大多数情况下也会执行此操作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
¹此符号表示手册页,而不是实际的调用。请参阅man 3 exit
。
tar
实现都使用来检测或报告所有错误t
(bsdtar
不是,您可以tar xOf file.tar > /dev/null
在此处使用)。并非所有tar
实现都会以退出状态2 star
(255)或bsdtar
(1)退出,但重要的是此处的退出状态为非零。
exit(2)
我有关的是适当的联机帮助页,而不是确切的退出值(这就是为什么我在下句话中明确提到“非零”的原因)。对此进行注释(并将该部分更改为右侧的-.-)。
抱歉,但是您不能,tar似乎缺乏测试功能(例如,如果您忘记了* nix并尝试使用winrar对其进行测试,结果将是:“此类型的存档不支持该命令”)
我在上面的评论中指出的方式是,tar实际上没有内部CRC来具有比较术语,因此,如果您使用编辑器更改tar归档文件,则列出和提取操作可能没有任何错误,但是可以提取损坏的数据
总之,我最终希望在这里找到一种解决方案,但是还没有一个,幸运的是,有两个好消息:
有非常非常非常少的tar存档,它们也没有用其他程序(例如gzip,bzip2等)压缩,因此该程序将具有测试解决方案,而没有压缩它们的人则有点la脚,真的
对于我的个人问题,很幸运,将其解压缩后,我发现了一个md5sum文件,其中包含所有文件的CRC(即使是将tar tar放在网络上并且不想压缩它的人,他仍然想成为可以验证)
您可以通过将以下参数传递给来实现tar
:
$ tar -cvzf test.tar test_file
-c
创建通过-f
('test.tar')命名的文件。-z
gzip存档。-v
使它变得冗长。我很确定这不是一个准确的解决方案。
tar
输出重定向到/dev/null
,因为您实际上可能不想看到它。