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

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

输出:

3abb17b66815bc7946cefe727737d295  ./iso/somefile.iso

我如何“剥离”文件名,只保留值?


当前回答

另一种方法是:

md5sum filename | cut -f 1 -d " "

Cut将行分割为每个空格,只返回第一个字段。

其他回答

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

好吧,我今天遇到了同样的问题,但是我在运行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函数

如果你担心文件名不正常:

md5sum < "${file_name}" | awk NF=1

f244e67ca3e71fff91cdf9b8bd3aa7a5

其他更混乱的处理方法:

md5sum "${file_name}" | awk NF=NF OFS= FS=' .*$' 或 | awk '_{exit}++_' RS=' '

f244e67ca3e71fff91cdf9b8bd3aa7a5

完全在awk中完成:

mawk '开始 { __ = ARGV[ --ARGC ] _ = sprintf(“%c”,(_+=(_^=_<_)+_)^_+_*++_) RS = FS gsub(_,“&\\\\&”,__) ( _=“ md5sum < ”((_)(__)_) ) |获取线 print $(_*close(_)) }' “${file_name}”

f244e67ca3e71fff91cdf9b8bd3aa7a5

一个方法:

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

另一种方法:

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

另一种方法:

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

(不要尝试用反斜杠,除非你非常勇敢并且非常擅长反斜杠。)

这些解决方案相对于其他解决方案的优点是,它们只调用md5sum和shell,而不调用其他程序,如awk或sed。那么,这是否真的重要就另当别论了;你可能很难注意到其中的区别。

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

printf $(md5sum filename)