只使用md5sum获取哈希值(不带文件名)

时间:2010-09-09 18:07:27

标签: bash shell md5sum

我使用md5sum为文件生成哈希值。 但我只需要接收哈希值,而不是文件名。

md5=`md5sum ${my_iso_file}`
echo ${md5}

3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso

如何“删除”文件名并仅保留值?

16 个答案:

答案 0 :(得分:168)

简单的数组赋值有效...请注意,bash数组的第一个元素只能通过name而不是[0]索引来处理,即{{1} }只包含md5sum的32个字符。

$md5

答案 1 :(得分:142)

另一种方式:)

md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`

答案 2 :(得分:49)

您可以使用cut拆分空格中的行并仅返回第一个此类字段:

md5=$(md5sum "$my_iso_file" | cut -d ' ' -f 1)

答案 3 :(得分:22)

在Mac OS X上:

md5 -q file

答案 4 :(得分:14)

md5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"

答案 5 :(得分:5)

一种方式:

set -- $(md5sum $file)
md5=$1

另一种方式:

md5=$(md5sum $file | while read sum file; do echo $sum; done)

另一种方式:

md5=$(set -- $(md5sum $file); echo $1)

(除非你非常勇敢且非常善于使用反斜杠,否则不要尝试使用反斜杠。)

这些解决方案优于其他解决方案的优点是,它们只调用md5sum和shell,而不是awksed等其他程序。这实际上是否重要是一个单独的问题;你可能很难注意到差异。

答案 6 :(得分:3)

另一种方法是:

md5sum filename |cut -f 1 -d " "

剪切将分割到每个空格并仅返回第一个字段。

答案 7 :(得分:3)

如果您需要打印并且不需要换行,可以使用:

printf $(md5sum filename)

答案 8 :(得分:2)

md5=$(md5sum < $file | tr -d ' -')

答案 9 :(得分:0)

md5=`md5sum ${my_iso_file} | cut -b-32`

答案 10 :(得分:0)

如果文件名中有反斜杠,

md5sum会在哈希之前放入反斜杠。在第一个空格之前的前32个字符或任何内容可能不是正确的哈希。使用标准输入时不会发生这种情况(文件名只是 - ),因此pixelbeat's answer会起作用,但许多其他人需要添加类似| tail -c 32的内容。

答案 11 :(得分:0)

好吧,我今天遇到了同样的问题,但是在运行find命令时尝试获取文件md5哈希值。我得到了最多的投票问题并将其包装在一个名为md5的函数中,以便在find命令中运行。我的任务是计算文件夹中所有文件的哈希值,并将其输出为hash:filename

md5() { md5sum $1 | awk '{ printf "%s",$1 }'; }
export -f md5
find -type f -exec bash -c 'md5 "$0"' {} \; -exec echo -n ':' \; -print

所以,我从这里和find -exec a shell function?

得到了一些作品

答案 12 :(得分:0)

依靠head

md5_for_file=`md5sum ${my_iso_file}|head -c 32`

答案 13 :(得分:-1)

为了完整起见,使用正则表达式和捕获组使用sed的方法:

md5=$(md5sum "${my_iso_file}" | sed -r 's:\\*([^ ]*).*:\1:')

正则表达式将捕获组中的所有内容,直到达到空格为止。要使捕获组正常工作,您需要捕获sed中的所有内容。 (有关sed和Caputer组的更多信息,请访问https://stackoverflow.com/a/2778096/10926293
作为sed中的定界符,我使用冒号,因为它们在文件路径中无效,而且我不必在文件路径中转义斜线。

答案 14 :(得分:-3)

另一种方式:

md5=$(md5sum ${my_iso_file} | sed '/ .*//' )

答案 15 :(得分:-3)

md5=$(md5sum < index.html | head -c -4)