ubuntu 比较2个文件与md5sum的内容

92vpleto  于 2023-01-25  发布在  其他
关注(0)|答案(4)|浏览(158)

如何在一个命令中比较2个文件的md5总和?
我可以分别计算它们:

my_prompt$ md5sum file_1.sql
20f750ff1aa835965ec93bf36fd8cf22  file_1.sql

my_prompt$ md5sum file_2.sql
733d53913c366ee87b6ce677971be17e  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) == (md5sum file_2.sql)
my_prompt$ `md5sum file_1.sql` -eq `md5sum file_2.sql`

我错过了什么?尝试跟踪Compare md5 sums in bash scripthttps://unix.stackexchange.com/questions/78338/a-simpler-way-of-comparing-md5-checksum,但运气不佳。

6g8kf2rb

6g8kf2rb1#

你需要一个程序/build-in来计算比较结果。通常你会使用test/[/[[来完成。使用这些程序-eq比较十进制数。因此使用字符串比较=代替。

[[ "$(md5sum file_1.sql)" = "$(md5sum file_2.sql)" ]]

此命令的退出代码$?告诉您这两个字符串是否相等。
但是,你可能想使用cmp来代替,这个程序直接比较文件,应该更快,因为它不需要计算任何东西,也更安全,因为它不会像哈希比较那样给予假阳性。

cmp file_1.sql file_2.sql
omqzjyyz

omqzjyyz2#

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

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

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

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

在需要返回代码的情况下,可以使用test命令,如下所示:

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

让我们分解命令:

$ 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
pengsaosao

pengsaosao3#

这将适用于bash

$ md5sum file1 file2 | md5sum --check

如果md5相等,两个文件都可以。您也可以对3个或更多的文件使用此方法。

owfi6suc

owfi6suc4#

按照@Socowi的回答,有一种方法可以在一行中得到答案:

[[ "$(md5sum file_1.sql)" = "$(md5sum file_2.sql)" ]] && echo "Same content" || echo "Different content"

&&||的作用相当于andor。当&&后跟||时,它在其他编程语言中的作用相当于三元运算符。换句话说,如果md5 sum相等,则echo "Same content",否则echo "Different content"

相关问题