只有使用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,而不是其他的程序,如awk
或sed
。 那实际上是否是一个单独的问题呢? 你可能很难注意到这个区别。
另一种方法是做:
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)