我使用md5sum为文件生成哈希值。 但我只需要接收哈希值,而不是文件名。
md5=`md5sum ${my_iso_file}`
echo ${md5}
输出:
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
我如何“剥离”文件名,只保留值?
我使用md5sum为文件生成哈希值。 但我只需要接收哈希值,而不是文件名。
md5=`md5sum ${my_iso_file}`
echo ${md5}
输出:
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
我如何“剥离”文件名,只保留值?
当前回答
另一种方法是:
md5sum filename | cut -f 1 -d " "
Cut将行分割为每个空格,只返回第一个字段。
其他回答
好吧,我今天遇到了同样的问题,但是我在运行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'中得到了一个Linux中的shell函数
另一种方法:
md5=$(md5sum ${my_iso_file} | sed '/ .*//' )
如果你需要打印它并且不需要换行符,你可以使用:
printf $(md5sum filename)
为了完整起见,sed使用正则表达式和捕获组的一种方法:
md5=$(md5sum "${my_iso_file}" | sed -r 's:\\*([^ ]*).*:\1:')
正则表达式捕获一个组中的所有内容,直到到达一个空格。要使捕获组工作,您需要捕获sed中的所有内容。
(关于sed和捕获组的更多信息请参见:如何使用sed只输出捕获的组?)
作为sed中的分隔符,我使用冒号,因为它们在文件路径中无效,而且我不必转义文件路径中的斜杠。
一个简单的数组赋值工作…请注意,Bash数组的第一个元素可以仅用名称寻址,而不带[0]索引,即$md5只包含md5sum的32个字符。
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2