如何通过Bash命令转换哈希文件格式适配sha512sum校验?
问题
我有一个仅包含大写SHA512哈希摘要的文件archive.hash,但sha512sum校验要求的格式是小写哈希摘要 + 两个空格 + 文件名。我试了这条命令:
sha512sum -c <(echo "$(cat archive.hash |tr A-Z a-z) archive.zip")
结果报错:
sha512sum: /dev/fd/63: no properly formatted SHA512 checksum lines found
查了下发现,执行echo "$(cat archive.hash |tr A-Z a-z) archive.zip"的时候,文件名archive.zip居然跑到了小写哈希前面,顺序完全反了,导致格式不对。请问怎么调整才能生成正确格式完成校验?
解决方法
问题根源在于archive.hash的内容可能带换行符,或者命令替换的处理逻辑导致顺序异常,直接用下面的方法就能搞定:
方法1:变量存储法
先把哈希转成小写存进变量,再拼接文件名输出,确保顺序不会乱:
sha512sum -c <(hash=$(tr A-Z a-z < archive.hash); echo "$hash archive.zip")
方法2:sed一键修改格式
用sed同时完成大小写转换和格式拼接,一步到位:
sha512sum -c <(sed 's/$/ archive.zip/; s/[A-Z]/\L&/g' archive.hash)
s/$/ archive.zip/:在哈希内容的末尾追加两个空格和文件名s/[A-Z]/\L&/g:把所有大写字母转成小写
方法3:管道组合法
通过管道把转大小写、拼接格式、校验三个步骤串起来:
tr A-Z a-z < archive.hash | awk '{print $0 " archive.zip"}' | sha512sum -c -
最后用sha512sum -c -从标准输入读取校验内容,不用临时文件或者进程替换。
内容的提问来源于stack exchange,提问作者bonzix
相关产品推荐
相关产品推荐

