【发布时间】:2018-09-12 08:47:00
【问题描述】:
我想要一个简单的 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。
【问题讨论】:
-
只是想知道,但你为什么不使用
if diff -q $file1 $file2 &>/dev/null; then do_your_stuff; fi甚至更好的if cmp --silent $file1 $file2; then do_your_stuff; fi -
@kvantour,我是 bash 新手,您的建议中有很多我不太了解的地方。从语法来看,我是否正确地将您的建议视为脚本,将
$file1等视为从命令行传入的变量?我尝试使用硬编码的文件名在命令行上运行您的第一个建议,然后使用echo $?打印输出,但没有找到我预期的结果。你能详细说明我想在do_your_stuff线上做什么吗?我可以在此处放置echo ...以打印出差异比较的结果,如果可以,我将如何捕获该结果? -
您最初的问题是比较两个动态计算的 md5sum。所以你没有将它们存储在任何变量或任何东西中。这意味着您实际上是在尝试确定两个文件是否相同。命令
cmp和diff正是这样做的。所以你可以检查这些命令的返回码。cmp --silent file1 file2或diff -q file1 file2 &> /dev/null
标签: linux bash awk md5sum sha1sum