md5sum 仅输出文件中的散列

md5sum output only hash in file

您好,我想在 linux 上创建一个 bash 文件,它根据备份的 md5 哈希检查文件的 md5 哈希,这样我就知道原始文件是否已被篡改。该脚本应输出两个文件的 md5 哈希值,然后比较两个创建的哈希文件:

md5sum file1 > file1.md5 | cut -c -32
if [ file1.md5 =! backup.md5 ] then;
   #send email

但它不起作用,file.md5 中仍然有文件名,有人知道如何只获取 file.md5 的 has 吗?

您的脚本有几个问题。

首先你应用 cut -c -32 在你已经将 md5sum 输出重定向到 file1.md5 之后 ,这就是它什么都不做的原因。

你应该像那样重组它,而不是:

md5sum file1 | cut -c -32 > file1.md5

接下来,你不能直接与 =! 比较文件,你必须阅读并比较它们的内容,就像这样:

[ "$(cat file1.backup.md5)" != "$(cat file1.real.md5)" ]

另请注意 md5sum 已经有一个 "check mode",因此您可以简单地这样做:

#Save MD5 sum of your file to backup.md5, in md5sum native format
md5sum file1 > backup.md5

#Later on ...
if ! md5sum -c backup.md5; then
...

您的命令顺序错误。写

md5sum file1 | cut -c -32 > file1.md5

管道错误position.Use像这样:

 md5sum file1| cut -c -32 > file1.md5

或者在不将 md5 和保存到文件的情况下完全实施:

ORG_SUM=`md5sum org_file | cut -c -32`
BCK_SUM=`md5sum bck_file | cut -c -32`
if [ "${ORG_SUM}" != "${BCK_SUM}" ]; then
   #send email
fi

回复:"there is still the filename in the md5 [string], ... how to only get the hash?"

md5sum returns 的字符串是(或至少结构类似)具有两个字段的记录或具有两个元素的元组。例如,

$ md5sum filename.txt 8d7dd71ff51614e69339b03bd1cb86ac filename.txt

要仅获取哈希值(第一个 field/element),请尝试将字符串通过管道传输到 awk,如下所示:

$ md5sum filename.txt | awk '{print }' 8d7dd71ff51614e69339b03bd1cb86ac

我提交了这个答案,以回答 OP 一年多前向其他正在处理类似问题并像我一样偶然发现这个话题的人提出的问题。