使用sha256sum -c处理带全路径的校验文件时报错的解决方法
解决sha256sum -c校验带路径的.sha256文件报错问题
首先纠正你的误解:sha256sum -c完全支持带完整路径的.sha256文件,报错的核心原因不是路径本身,而是以下两种情况之一:
- .sha256文件内部的校验行仅写了目标文件的相对文件名(比如
x3),但你在当前目录执行校验时找不到该文件; - 对应的目标文件(比如
/path/a/9b/x3)本身不存在或权限不足。
验证问题根源
先手动执行单个校验命令定位具体错误:
sha256sum -c /path/a/9b/x3.sha256
如果输出提示x3: No such file or directory,那就是.sha256文件内的文件名路径不匹配导致的。
两种修复方案
方案一:批量修正.sha256文件内的路径
通过脚本自动给.sha256文件里的目标文件名补上绝对路径,再执行校验:
while read sha_file; do # 跳过空行 [ -z "$sha_file" ] && continue # 获取.sha256文件的所在目录 sha_dir=$(dirname "$sha_file") # 获取对应的目标文件名(去掉.sha256后缀) target_name=$(basename "$sha_file" .sha256) # 替换.sha256文件内的相对文件名为绝对路径 sed -i "s/^\([0-9a-fA-F]*\)[[:space:]]\+.*/\1 $sha_dir\/$target_name/" "$sha_file" # 执行校验并追加到输出文件 sha256sum -c "$sha_file" >> output_file.txt done < file.txt
方案二:切换到.sha256文件所在目录执行校验
如果不想修改.sha256文件,可以先进入目标目录,用相对路径执行校验(注意输出文件要写绝对路径,避免切换目录后路径错误):
# 先定义输出文件的绝对路径,避免切换目录后路径混乱 OUTPUT="/绝对路径/output_file.txt" while read sha_file; do [ -z "$sha_file" ] && continue # 切换到.sha256文件所在目录,失败则跳过 cd "$(dirname "$sha_file")" || continue # 用相对路径执行校验 sha256sum -c "$(basename "$sha_file")" >> "$OUTPUT" # 切回原目录(静默输出) cd - > /dev/null done < file.txt
额外注意事项
- 如果是目标文件不存在或权限问题,需要先确保
/path/a/9b/x3这类文件存在,且当前用户有读取权限; - 脚本里加入了跳过空行的逻辑,避免处理file.txt里的空行导致错误。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

