只有使用md5sum(没有文件名)获得散列值

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

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

3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso

我怎样才能“去掉”文件名,只保留这个值?

那么另一种方式:)

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

一个简单的数组赋值工作…请注意,一个bash数组的第一个元素可以通过没有[0]索引的name来寻址,即$md5只包含md5sum的32个字符。

 md5=($(md5sum file)) echo $md5 # 53c8fdfcbb60cf8e1a1ee90601cc8fe2 

您可以使用cut来分隔空格上的行,并只返回第一个这样的字段:

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

在Mac OS X上:

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

单程:

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

其他方式:

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

其他方式:

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

(除非你非常勇敢,而且反斜杠非常好,否则不要尝试使用back-ticks。)

这些解决scheme优于其他解决scheme的优点是它们只调用md5sum和shell,而不是其他的程序,如awksed 。 那实际上是否是一个单独的问题呢? 你可能很难注意到这个区别。

另一种方法是做:

 md5sum filename |cut -f 1 -d " " 

剪切将分割线到每个空间,并只返回第一个字段。

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

如果您需要打印而不需要换行符,则可以使用:

 printf $(md5sum filename) 

如果文件名中有反斜杠, md5sum在散列前加反斜杠。 在第一个空格之前的前32个字符或者任何东西可能不是一个合适的散列 使用标准input(文件名将只是 – )不会发生,所以pixelbeat的答案将起作用,但许多其他人则需要添加类似于| tail -c 32 | tail -c 32

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

其他方式:

 md5=$(md5sum ${my_iso_file} | sed '/ .*//' ) 
 md5=$(md5sum < index.html | head -c -4)