Linux bash:在不设置变量的情况下比较哈希字符串

问题描述 投票:0回答:2

我想要一个简单的 bash 命令来比较两个哈希值,输出它们是否相同。这是我尝试过的:

md5sum file1 | awk '{print $1}' # outputs hash value without filename

md5sum file1 > md5sum file2 # no output even though files/hashes differ

我已经尝试了以下方法,但到目前为止没有成功:

[ md5sum states.txt | awk '{print $1}' == md5sum states_copy.txt | awk '{print $1}' ]`

[ (md5sum states.txt | awk '{print $1}') == (md5sum states_copy.txt | awk '{print $1}') ]

我对脚本或多行 bash 解决方案持开放态度,或使用 shasum,但我对 Linux 和 bash 很陌生,因此尝试使其尽可能简单。

我运行的是 Ubuntu 18.04。

linux bash awk md5sum sha1sum
2个回答
5
投票
[ "$(<states.txt md5sum)" = "$(<states_copy.txt md5sum)" ]
  1. 使用
    $(...)
    获取命令输出
  2. 记得将
    $(...)
    括在
    "
  3. Bash 测试支持单
    =
    进行字符串比较,而不是双
    ==
  4. 使用 stdin 并使用
    <
    重定向将文件重定向到 md5sum。

1
投票

有很多方法可以实现,既然你用过awk,你可以尝试:

md5sum f1 f2|awk '{a[$1]}END{print NR==length(a)}'

如果两个哈希值相同,则输出

0
,否则输出
1
。您可以添加更多文件到
md5sum
:

md5sum f1 f2 f3...fn|awk '{a[$1]}END{print NR==length(a)}'
© www.soinside.com 2019 - 2024. All rights reserved.