Linux bash:不设置变量比较哈希字符串

Linux bash: Compare hash strings without setting variables

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

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

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

到目前为止,我尝试了以下变体但没有成功:

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

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

我对脚本或多行 bash 解决方案或使用 shasum 持开放态度,但我是 Linux 和 bash 的新手,所以我尽量保持原样越简单越好。

我 运行 Ubuntu 18.04.

[ "$(<states.txt md5sum)" = "$(<states_copy.txt md5sum)" ]
  1. 使用$(...)获取命令输出
  2. 记得把$(...)放在"
  3. 里面
  4. Bash 测试支持单 = 进行字符串比较,不支持双 ==
  5. 使用 stdin 和 < 重定向将文件重定向到 md5sum。

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

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

如果两个哈希相同,则输出0,否则1。您可以将更多文件添加到 md5sum:

md5sum f1 f2 f3...fn|awk '{a[]}END{print NR==length(a)}'