在我看来,这.md5 校验和文件用于验证下载的内容主要包含要验证的文件的校验和,但不包含文件名。
使用md5sum
它似乎有点不切实际,因为当-C哎呀,它想要 md5 密钥和由空格分隔的文件名作为输入。
因此,鉴于这些文件仅包含校验和,检查它们最实用的一句话是什么?
这个帖子建议一种方法,但需要手动输入密钥和文件名。
md5sum -c - <<< "b4460802b5853b7bb257fbf071ee4ae2 foo"
这个帖子有这个有趣的建议,但我发现它有点难以阅读和输入:
cmp foo.md5 <(md5sum foo | awk '{print $1}') && echo $?
这可行,但不切实际,因为需要手动输入文件名(在我的系统上不会自动完成):
printf $(cat foo.md5)\\tfoo | md5sum -c -
这会自动完成,但感觉很笨拙:
printf "%s %s" $(cat foo.md5) foo | md5sum -c -
这更好,因为自动完成可以工作,但它可能有点长,而且还需要三个步骤。
md5sum foo | awk '{printf $1}' | diff foo.md5
还有其他想法吗?
答案1
问题是您链接到的站点没有标准 md5 文件。
那里的 Md5 文件缺少每个签名的文件名。必须重建签名和文件名。
怎么样:
md5sum -c <<<"$b"
或者:
md5sum -c <(echo $(<$a.md5) $a)
哪里$a
和$b
是:
a="jackson-annotations-2.8.4.jar"
b="$(<jackson-annotations-2.8.4.jar.md5) jackson-annotations-2.8.4.jar"
或者,更简单:
a=jackson-annotations-2.8.4.jar; b="$(<$a.md5) $a"
全部与文件名放在一行(两种解决方案):
a=jackson-annotations-2.8.4.jar; b="$(<$a.md5) $a"; md5sum -c <<<"$b"
a=jackson-annotations-2.8.4.jar; md5sum -c <(echo $(<$a.md5) $a)
我使用的整个脚本是:
#!/bin/bash
a=jackson-annotations-2.8.4.jar
site=https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.8.4
wget -N "$site/$a"
wget -N "$site/$a.md5"
b="$(<$a.md5) $a"
md5sum -c - <<<"$b"
答案2
这是您在文件中使用非标准 md5 校验和行时可以获得的最佳结果。下面的一行代码不需要从文件中复制任何值,只需复制文件名本身和包含 md5 和的文件
md5sum -c <<< $(echo $(cat jackson-annotations-2.8.4-javadoc.jar.md5) jackson-annotations-2.8.4-javadoc.jar)