使用 md5sum 比较 2 个文件的内容
Comparing content of 2 files with md5sum
如何在一个命令中比较 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`
我在这里错过了什么?
尝试跟随 and https://unix.stackexchange.com/questions/78338/a-simpler-way-of-comparing-md5-checksum 但运气不佳。
您需要一个 program/built-in 来评估比较。通常你会使用 test
/[
/[[
来这样做。使用这些程序 -eq
比较十进制数。因此,请改用字符串比较 =
。
[[ "$(md5sum file_1.sql)" = "$(md5sum file_2.sql)" ]]
此命令的退出代码 $?
告诉您两个字符串是否相等。
但是,您可能想改用 cmp
。这个程序直接比较文件,应该更快,因为它不需要计算任何东西,而且更安全,因为它不会像哈希比较那样给出误报。
cmp file_1.sql file_2.sql
通过将文件名作为参数传递给 md5sum
命令,我们得到如下结果:
$ md5sum foo.json bar.json
07a9a5c765f5d861b506eabd02f5aa4b *foo.json
07a9a5c765f5d861b506eabd02f5aa4b *bar.json
因此,我们必须比较 md5sum
输出的第一列:
if [[ $(md5sum foo.json bar.json | awk '{print }' | uniq | wc -l) == 1 ]]
then
echo "Identical files"
else
echo "There are differences"
fi
如果我们需要 return 代码,我们可以使用 test
命令,如下所示:
test $(md5sum foo.json bar.json | awk '{print }' | uniq | wc -l) == 1
让我们分解命令:
$ md5sum foo.json bar.json
07a9a5c765f5d861b506eabd02f5aa4b *foo.json
07a9a5c765f5d861b506eabd02f5aa4b *bar.json
$ md5sum foo.json bar.json | awk '{print }'
07a9a5c765f5d861b506eabd02f5aa4b
07a9a5c765f5d861b506eabd02f5aa4b
$ md5sum foo.json bar.json | awk '{print }' | uniq
07a9a5c765f5d861b506eabd02f5aa4b
$ md5sum foo.json bar.json | awk '{print }' | uniq | wc -l
1
$ test $(md5sum foo.json bar.json | awk '{print }' | uniq | wc -l) == 1
$ echo $?
0
这将适用于 bash
$ md5sum file1 file2 | md5sum --check
如果 md5 相等,则两个文件都可以。您也可以将其用于 3 个或更多文件。
如何在一个命令中比较 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`
我在这里错过了什么?
尝试跟随
您需要一个 program/built-in 来评估比较。通常你会使用 test
/[
/[[
来这样做。使用这些程序 -eq
比较十进制数。因此,请改用字符串比较 =
。
[[ "$(md5sum file_1.sql)" = "$(md5sum file_2.sql)" ]]
此命令的退出代码 $?
告诉您两个字符串是否相等。
但是,您可能想改用 cmp
。这个程序直接比较文件,应该更快,因为它不需要计算任何东西,而且更安全,因为它不会像哈希比较那样给出误报。
cmp file_1.sql file_2.sql
通过将文件名作为参数传递给 md5sum
命令,我们得到如下结果:
$ md5sum foo.json bar.json
07a9a5c765f5d861b506eabd02f5aa4b *foo.json
07a9a5c765f5d861b506eabd02f5aa4b *bar.json
因此,我们必须比较 md5sum
输出的第一列:
if [[ $(md5sum foo.json bar.json | awk '{print }' | uniq | wc -l) == 1 ]]
then
echo "Identical files"
else
echo "There are differences"
fi
如果我们需要 return 代码,我们可以使用 test
命令,如下所示:
test $(md5sum foo.json bar.json | awk '{print }' | uniq | wc -l) == 1
让我们分解命令:
$ md5sum foo.json bar.json
07a9a5c765f5d861b506eabd02f5aa4b *foo.json
07a9a5c765f5d861b506eabd02f5aa4b *bar.json
$ md5sum foo.json bar.json | awk '{print }'
07a9a5c765f5d861b506eabd02f5aa4b
07a9a5c765f5d861b506eabd02f5aa4b
$ md5sum foo.json bar.json | awk '{print }' | uniq
07a9a5c765f5d861b506eabd02f5aa4b
$ md5sum foo.json bar.json | awk '{print }' | uniq | wc -l
1
$ test $(md5sum foo.json bar.json | awk '{print }' | uniq | wc -l) == 1
$ echo $?
0
这将适用于 bash
$ md5sum file1 file2 | md5sum --check
如果 md5 相等,则两个文件都可以。您也可以将其用于 3 个或更多文件。