如何在多级目录下选取文件?Bash脚本执行提示文件未找到
问题解决:Bash脚本处理子目录.gz文件提示“文件未找到”
问题描述
我是这个领域的新手,为我的基础问题致歉。我试了几种方法都没成功,现在我在目录a里,要处理两级子目录下的.gz文件,但执行脚本时总是提示“文件未找到”。这些文件名很长,不同目录下的文件名不一样。这是我工作的第一步,之后还要在同一个循环里执行其他操作。
原脚本
#!/bin/bash for k in {1..9}; do rnxEditGde.py -data "y2019/d${k}/*.gz" -o dataRecordFile.Orig.gz rinex2StaDb.py "y2019/d${k}/*.gz" -outFile sta.sta_db done
问题原因
核心问题是通配符被引号包裹导致Bash无法解析:你把包含*.gz的路径用双引号括起来后,Bash不会将*.gz解析为匹配该目录下所有.gz文件的通配符,反而会把整个字符串"y2019/d${k}/*.gz"当作一个完整的文件名去查找,自然找不到对应的文件。
修正后的脚本
基础修正版
直接去掉通配符路径的引号,让Bash正常解析*.gz:
#!/bin/bash for k in {1..9}; do rnxEditGde.py -data y2019/d${k}/*.gz -o dataRecordFile.Orig.gz rinex2StaDb.py y2019/d${k}/*.gz -outFile sta.sta_db done
健壮性增强版
如果存在子目录不存在或无.gz文件的情况,添加判断逻辑避免报错,同时避免输出文件被覆盖:
#!/bin/bash for k in {1..9}; do dir_path="y2019/d${k}" # 检查目录存在且目录下有.gz文件 if [ -d "$dir_path" ] && compgen -G "${dir_path}/*.gz" > /dev/null; then rnxEditGde.py -data "${dir_path}"/*.gz -o dataRecordFile.Orig.${k}.gz rinex2StaDb.py "${dir_path}"/*.gz -outFile sta.${k}.sta_db else echo "警告:目录${dir_path}不存在或无.gz文件,跳过处理" fi done
额外提示
- 原脚本中输出文件
dataRecordFile.Orig.gz和sta.sta_db会在每次循环中被覆盖,建议给输出文件名加上循环变量${k}的后缀(如上面健壮版所示),保留每个目录的处理结果。 - 如果子目录名称是
d01到d09(带前导零),需要把循环改为{01..09}才能正确匹配目录。
内容的提问来源于stack exchange,提问作者domestic ivy
相关产品推荐
相关产品推荐

