我使用md5sum为文件生成哈希值。 但我只需要接收哈希值,而不是文件名。
md5=`md5sum ${my_iso_file}`
echo ${md5}
输出:
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
我如何“剥离”文件名并仅保留其值?
我使用md5sum为文件生成哈希值。 但我只需要接收哈希值,而不是文件名。
md5=`md5sum ${my_iso_file}`
echo ${md5}
输出:
3abb17b66815bc7946cefe727737d295 ./iso/somefile.iso
我如何“剥离”文件名并仅保留其值?
简单的数组赋值... 注意,在Bash数组中,可以通过name
而无需使用[0]
索引来访问第一个元素,即$md5
仅包含md5sum的32个字符。
md5=($(md5sum file))
echo $md5
# 53c8fdfcbb60cf8e1a1ee90601cc8fe2
echo>文件; for i in 文件; do md5=($(md5sum 文件)); echo $md5; done
- 它应该输出 68b329da9893e34099c7d8ad5cb9c940
。 - Peter.Oecho ($(echo -n foo | md5sum))
不能正常工作?会出现错误 bash: syntax error near unexpected token $(echo -n foo | md5sum)'
。 - lkraavecho -n foo | md5sum
会将结果输出到标准输出,包括2个Shell单词:acbd18db4cc2f85cedef654fccc4a4d8
和-
(其中的 -
表示源是标准输入)。使用命令替换语法$( command )
可以让Bash将这些单词捕获到一个字符串中。使用圆括号( )
将数组构建为Bash数组,并且可以通过给数组取一个变量名来进行赋值。例如,使用md5=($(echo -n foo | md5sum))
将数组赋值给变量名为md5
的数组。你还没有将该数组分配给一个变量名。 - Peter.Oecho $md5[1]
来仅获取哈希值(但这在 Bash 中不可移植)。 - Shane使用AWK:
md5=`md5sum ${my_iso_file} | awk '{ print $1 }'`
MD5 (/Users/hello.txt) = 24811012be8faa36c8f487bbaaadeb71
,而你的代码却只返回了 MD5
。 - alper| awk '{print $1}'
来获取 -
的运行 => md5sum < ${my_iso_file} | awk '{print $1}'
@ChristopheDeTroyer - alpercut
命令来按空格分割行并仅返回第一个字段:md5=$(md5sum "$my_iso_file" | cut -d ' ' -f 1)
md5sum
-> sha256sum
,而无需记住需要“剪切”的字符数量。 - David Tabernero M.在Mac OS X上:
md5 -q file
coreutils
中的 gmd5sum
也可以在 MacOS 上像其他答案中提到的 md5sum
一样工作。 - Anton Tarasenko11.5.2
上对我有效,但在删除 -q
选项后不再有效。 - Jhoan Manuel Muñoz Serranomd5="$(md5sum "${my_iso_file}")"
md5="${md5%% *}" # remove the first space and everything after it
echo "${md5}"
$()
周围加引号(尽管它们没有任何影响),但肯定需要在 ${}
周围加上引号。 - Roman Cheplyaka通过依靠 head
标签:
md5_for_file=`md5sum ${my_iso_file}|head -c 32`
printf $(md5sum filename)
一种方法:
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
。但是否真正有影响则是另一个问题;你可能很难注意到差异。
md5=$(md5sum < $file | tr -d ' -')