使用 md5sum 比较 2 个文件的内容

Gus*_*sen 8 bash ubuntu md5 md5sum windows-subsystem-for-linux

如何在一个命令中比较 2 个文件的 md5 和?

我可以分别计算它们:

my_prompt$ md5sum file_1.sql
20f750ff1aa835965ec93bf36fd8cf22  file_1.sql

my_prompt$ md5sum file_2.sql
733d53913c366ee87b6ce677971be17e  file_2.sql
Run Code Online (Sandbox Code Playgroud)

但想知道如何将其合并到单个比较计算中。我尝试过不同的方法但都失败了:

my_prompt$ md5sum file_1.sql == md5sum file_2.sql
my_prompt$ `md5sum file_1.sql` == `md5sum file_2.sql`
my_prompt$ (md5sum file_1.sql) == (md5sum file_2.sql)
my_prompt$ `md5sum file_1.sql` -eq `md5sum file_2.sql`
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?尝试了以下Compare md5 sums in bash scripthttps://unix.stackexchange.com/questions/78338/a-simpler-way-of-comparing-md5-checksum,但没有运气。

Soc*_*owi 12

您需要一个程序/内置程序来评估比较。通常您会使用test//来执行此操作。使用这些程序比较十进制数。因此请改用字符串比较。[[[-eq=

[[ "$(md5sum file_1.sql)" = "$(md5sum file_2.sql)" ]]
Run Code Online (Sandbox Code Playgroud)

该命令的退出代码$?告诉您两个字符串是否相等。

但是,您可能想使用cmp它。该程序直接比较文件,应该更快,因为它不需要计算任何东西,而且也更安全,因为它不能像哈希比较那样给出误报。

cmp file_1.sql file_2.sql
Run Code Online (Sandbox Code Playgroud)

  • 是的,但您通常不会访问“$?”。相反,你可以写类似 `if [[ a = b ]]; 的内容。然后回显相等;否则回显不同;fi`。`cmp` 会直接告诉您文件是否不同,如果文件相同则保持安静。 (2认同)

fun*_*unk 5

通过将文件名作为参数传递给命令md5sum,我们得到如下内容:

$ md5sum foo.json bar.json
07a9a5c765f5d861b506eabd02f5aa4b *foo.json
07a9a5c765f5d861b506eabd02f5aa4b *bar.json
Run Code Online (Sandbox Code Playgroud)

因此,我们必须比较输出的第一列md5sum

if [[ $(md5sum foo.json bar.json | awk '{print $1}' | uniq | wc -l) == 1 ]]
then
    echo "Identical files"
else
    echo "There are differences"
fi
Run Code Online (Sandbox Code Playgroud)

如果我们需要返回码,我们可以使用test以下命令:

test $(md5sum foo.json bar.json | awk '{print $1}' | uniq | wc -l) == 1
Run Code Online (Sandbox Code Playgroud)

让我们分解一下命令:

$ md5sum foo.json bar.json
07a9a5c765f5d861b506eabd02f5aa4b *foo.json
07a9a5c765f5d861b506eabd02f5aa4b *bar.json

$ md5sum foo.json bar.json | awk '{print $1}'
07a9a5c765f5d861b506eabd02f5aa4b
07a9a5c765f5d861b506eabd02f5aa4b

$ md5sum foo.json bar.json | awk '{print $1}' | uniq
07a9a5c765f5d861b506eabd02f5aa4b

$ md5sum foo.json bar.json | awk '{print $1}' | uniq | wc -l
1

$ test $(md5sum foo.json bar.json | awk '{print $1}' | uniq | wc -l) == 1

$ echo $?
0
Run Code Online (Sandbox Code Playgroud)