Unix下遍历结构化子目录校验SHA256完整性脚本报错排查
解决SHA256校验脚本的"No such file or directory"错误
错误原因
你遇到的sh: line 8: : No such file or directory错误,本质是脚本中某个变量为空,导致执行了空命令。结合你的目录结构,大概率是遍历逻辑没正确过滤文件、路径拼接出错,或是没处理通配符匹配不到目录的情况。
修复后的校验脚本
#!/bin/bash # 遍历dirA下所有符合PER+三位整数格式的子目录 for per_dir in dirA/PER[0-9][0-9][0-9]; do # 跳过非目录项(避免通配符无匹配时出错) [ -d "$per_dir" ] || continue # 遍历PER子目录下的随机字符串子目录 for rand_dir in "$per_dir"/*; do [ -d "$rand_dir" ] || continue # 遍历随机目录下的所有文件 for file in "$rand_dir"/*; do # 跳过.sha256校验文件本身 [[ "$file" == *.sha256 ]] && continue # 拼接对应的校验文件路径 checksum_file="$file.sha256" # 检查校验文件是否存在 if [ ! -f "$checksum_file" ]; then echo "Integrity of $file is bad: Missing checksum file" continue fi # 执行校验,通过返回值判断结果 if sha256sum -c --status "$checksum_file"; then echo "Integrity of $file is good" else echo "Integrity of $file is bad" fi done done done
关键修复点
- 用
PER[0-9][0-9][0-9]精确匹配目标子目录,避免无关目录干扰 - 每一步都校验目录是否存在,防止通配符无匹配时把表达式当作文件名处理
- 跳过
.sha256文件本身,避免尝试校验校验文件的冗余操作 - 所有路径变量用双引号包裹,适配含空格或特殊字符的文件名/目录名
- 使用
sha256sum -c --status自动校验,比手动计算校验和更可靠且简洁
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

