如何检查文件是否损坏?


Answers:


10

不,没有任何常规解决方案。检查文件是否损坏的唯一方法是尝试读取它。只有知道如何读取特定格式的软件才能执行此操作。

您可以做的是file识别文件的类型,然后使用类型选择合适的程序来检查文件。您可以编写如下脚本:

# /bin/bash -eu

FILENAME=$1

FILETYPE="$(file -b $FILENAME | head -1 | cut -d , -f 1)"
case "$FILETYPE" in
    "gzip compressed data") CHECKER="gunzip -t" ;;
    # many, many more lines here
    *) echo "Unknown type: $FILETYPE"; exit 1 ;;
esac

$CHECKER $FILENAME

但是您需要做很多工作来填写案例说明。

可能有人已经编写了这样的脚本(或程序),但我什么都不知道。


1
“只有知道如何读取特定格式的软件才能做到这一点”是一个错误的假设。许多程序都不关心您提供给他们的文件类型。(想想例如grepcattar...)。因此,您的解决方案非常膨胀。
rozcietrzewiacz 2011年

4
“阅读”,我的意思是“解释”-我应该更加清楚。您不能使用cat或任何其他将文件纯粹视为非结构化字节流的程序来检查损坏。我不认为我的解决方案is肿。
汤姆·安德森

您可以按照Caleb的建议将每个文件视为二进制数据,并存储校验和以供以后验证。这是通用,简单且相对较快的。
rozcietrzewiacz 2011年

1
但是我现在看到,您的方法具有一个好处,即使您可以对以前未曾查看或访问的文件也可以执行验证。这绝对是一个加号-您可以在答案中指出。
rozcietrzewiacz 2011年

14

如果您在某个时间点知道该文件是好的,则可以对其进行校验和,并稍后使用它进行比较以确保它仍然完整。这在介质之间或跨网络传输文件之前很有用。

如果您不知道文件的良好状态,则没有通用的方法或检查损坏的方法。在每种情况下,只有特定的文件格式才能确定损坏或未损坏的数据。


3

如果您碰巧使用ZFS,则可以读取文件并确保它不被损坏,或者读取错误而已。

编辑在做出明智的评论之后,以下是对我的回答的澄清:

ZFS可以保护和检测静默数据损坏。例如:http: //www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191当然,如果文件在最初写入时已被破坏,则没有任何内容文件系统可以做到的。

为了防止在文件传输过程中发生损坏,通常的通用技术是md5sum或类似的哈希。


哇,什么功能:O
LanceBaynes

1
因此,如果您从网络上下载了损坏的视频?ZFS不会为您提供任何帮助-只是验证损坏的文件没有被更改。ZFS很棒,但是它不是检查损坏文件的解决方案。
Tom Anderson

不幸的是,这仅仅是文件系统完整性检查,不是对文件的实际了解以及它们是否损坏。我怀疑@Lance最常用的用法是能够确定下载或以其他方式传输的传入文件是否有效。ZFS无法神奇地确定文件的好坏,只能保证将您提供的任何内容保存并在本地返回。
Caleb

由于该问题被标记为/ data-recovery和/ filesystems,因此我认为这与静默数据损坏有关,而不是与最初已经损坏的文件有关。编辑答案以澄清这一点。
jlliagre 2011年

@jiliagre:在您回答大约一个小时后,我用那个标签(可能是错误地)重提了这个问题。当您回答时,它被简单地标记为“ linux”。
Caleb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.