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

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

输出:

3abb17b66815bc7946cefe727737d295  ./iso/somefile.iso

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


当前回答

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

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

其他回答

一个简单的数组赋值工作…请注意,Bash数组的第一个元素可以仅用名称寻址,而不带[0]索引,即$md5只包含md5sum的32个字符。

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

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

printf $(md5sum filename)

另一种方法:

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

在Mac OS X上:

md5 -q file

如果文件名中有反斜杠,Md5sum会在散列前加上一个反斜杠。前32个字符或第一个空格之前的任何字符可能不是正确的散列。

当使用标准输入时(文件名将只是-),它不会发生,所以pixelbeat的答案将工作,但许多其他将需要添加像| tail -c 32这样的东西。