我正在寻找一个单一命令,以十六进制数字形式发出一个文件内容的sha256哈希值。
我知道有shasum -a 256
、openssl dgst -sha256
、sha256sum
等命令可以用来计算哈希值,但它们都会与校验和一起输出其他信息,我想避免使用sed
或类似工具进行后处理。
您可以使用:
sh -c 'shasum < "$1" | cut -d" " -f1' -- "$file"
以下的 Perl 一行代码似乎满足了我所有的要求:
perl -e 'use Digest::SHA;' -e 'use warnings;' -e 'use strict;' -e 'use autodie;' -e 'my $sha = Digest::SHA->new(256); open my $fh, $ARGV[0]; $sha->addfile($fh, "b"); print $sha->hexdigest . "\n";' "$file"
特别是对于“有趣”的文件名是安全的,并且可以用于任意的shell脚本,包括作为find --exec
参数(这也是我需要它的原因之一)。
(我已经很久没有写Perl了,所以上面的内容可能还有改进的空间。)
sh -c 'sha256sum < "$1" | awk "{print \$1}"' --
也是一个单行命令... 在 Perl 中没有特别的用法。你可以使用任何脚本语言来实现。 - KamilCuk
single_command() { shasum -a 256 "$1" | cut -f 1 -d " "; }
并将其添加到你的shell中是很容易的。你也可以考虑向你提到的实用程序提交补丁,以添加一些额外的命令行选项。 - KamilCukshasum
+后处理解决方案都是不正确的,这也是我在我的shell脚本中“希望避免需要后处理”的原因之一。 - Per Mildner