我有一个文件下载成功,但另一个文件下载失败(只有一个大文件的前 100 MB),我怀疑它们是同一个文件。
为了验证这一点,我想检查它们的哈希值,但由于我只有未成功下载的文件的一部分,所以我只想对前几兆字节进行哈希处理。
我该怎么做呢?
操作系统是 Windows,但我安装了 cygwin 和 MinGW。
答案1
当您将一个文件与多个文件进行比较,或者将多个文件相互比较时,创建哈希值来比较文件是有意义的。
仅比较两个文件一次是没有意义的:计算哈希值的工作量至少与浏览文件并直接比较它们一样高。
一个有效的文件比较工具是cmp
:
cmp --bytes $((100 * 1024 * 1024)) file1 file2 && echo "File fragments are identical"
您还可以将其与dd
比较两个文件的任意部分(不一定从开头)结合使用,例如:
cmp \
<(dd if=file1 bs=100M count=1 skip=1 2>/dev/null) \
<(dd if=file2 bs=100M count=1 skip=1 2>/dev/null) \
&& echo "File fragments are identical"
答案2
抱歉,我无法尝试,但这种方法可行
dd if=yourfile.zip of=first100mb1.dat bs=100M count=1
dd if=yourotherfile.zip of=first100mb2.dat bs=100M count=1
这将获得两个文件的前 100 兆字节。
现在获取哈希值:
sha256sum first100mb1.dat && sha256sum first100mb2.dat
您也可以直接运行它:
dd if=yourfile.zip bs=100M count=1 | sha256sum
dd if=yourotherfile.zip bs=100M count=1 | sha256sum
答案3
似乎每个人都采用 Unix/Linux 路线,但只需使用 Windows 标准命令就可以轻松比较两个文件:
FC /B file file2
FC 存在于每个 Windows NT 版本中。而且(如果我没记错的话)也存在于 DOS 中。
它有点慢,但对于一次性使用来说这并不重要。
答案4
我知道上面说的是 Bash,但 OP 也说他们有 Windows。对于任何想要/需要 Windows 解决方案的人,有一个名为 HxD 的程序,它是一个十六进制编辑器,可以比较两个文件。如果文件大小不同,它会判断可用部分是否相同。如果需要,它能够对当前选择的任何内容运行校验和。它是免费的,可以从以下位置下载:HxD 网站。我与作者没有任何关系,我只是使用它多年了。