sh脚本使用ls+grep传文件给epk2extract时最后一个文件报不存在错误求助
问题原因
解析ls输出的写法不符合shell脚本的最佳实践,ls的输出是面向人类阅读的,没有标准化的解析格式,遇到文件名带空格、换行、特殊符号时会出现拆分错误。最后一个文件找不到的问题,大概率是ls输出的末尾换行符被带入变量,或者文件名包含特殊字符时拆分出错,导致最后一次循环的$file变量值和实际文件名不匹配。
修复方案
优先使用原生通配符匹配,不需要额外调用ls和grep,兼容性和稳定性最好:
# 开启nullglob配置,无匹配文件时不会把*STR*当成普通文件名处理 shopt -s nullglob # 遍历当前目录所有文件名包含STR的文件 for file in *STR*; do ./epk2extract "$file" -a 0x1C -v 0x1B done
如果需要更复杂的匹配规则,也可以用find实现:
# 仅查找当前目录(不递归子目录)下文件名包含STR的普通文件,直接传递给程序处理 find . -maxdepth 1 -type f -name "*STR*" -exec ./epk2extract {} -a 0x1C -v 0x1B \;
内容的提问来源于stack exchange,提问作者wes93
相关产品推荐
相关产品推荐

