如何检查文件是否损坏?

如何检查文件是否损坏?

有没有通用的解决方案来检查文件是否损坏?例如,视频文件是否损坏,或者压缩文件是否损坏等。

答案1

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

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

答案2

不,没有任何通用的解决方案。检查文件是否损坏的唯一方法是尝试读取它;只有知道如何读取该特定格式的软件才能做到这一点。

您可以做的是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

但您需要做很多工作才能填写案例陈述。

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

答案3

如果您碰巧使用 ZFS,则要么您可以读取该文件并且保证它不会被损坏,要么您遇到读取错误,而它确实被损坏。

编辑在明智的评论之后,这是对我的答案的澄清:

ZFS 可以保护和检测静默数据损坏。例如:http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191 当然,如果文件在最初写入时就已经损坏,则文件系统无能为力。

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

答案4

我想这里的答案大多是“覆盖海滨”,但OP问:

“例如,视频文件是否损坏,或者压缩文件已损坏, ETC。”

unzip实用程序具有-t执行以下操作的选项:

测试存档文件。该选项提取内存中的每个指定文件,并将扩展文件的 CRC(循环冗余校验,增强型校验和)与原始文件存储的 CRC 值进行比较

如果文件测试“良好”,则使用方便unzip -t /path/to/file地返回零(0true),如果发现问题则返回非零数字。

相关内容