比较 md5 校验和的最实用方法

比较 md5 校验和的最实用方法

在我看来,这.md5 校验和文件用于验证下载的内容主要包含要验证的文件的校验和,但不包含文件名。

使用md5sum它似乎有点不切实际,因为当-C哎呀,它想要 md5 密钥和由空格分隔的文件名作为输入。

因此,鉴于这些文件仅包含校验和,检查它们最实用的一句话是什么

  1. 这个帖子建议一种方法,但需要手动输入密钥和文件名。

    md5sum -c - <<< "b4460802b5853b7bb257fbf071ee4ae2 foo"
    
  2. 这个帖子有这个有趣的建议,但我发现它有点难以阅读和输入:

    cmp foo.md5 <(md5sum foo | awk '{print $1}') && echo $?
    
  3. 这可行,但不切实际,因为需要手动输入文件名(在我的系统上不会自动完成):

    printf $(cat foo.md5)\\tfoo | md5sum -c -
    

    这会自动完成,但感觉很笨拙:

    printf "%s %s" $(cat foo.md5) foo | md5sum -c -
    
  4. 这更好,因为自动完成可以工作,但它可能有点长,而且还需要三个步骤。

    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)

相关内容