You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多级目录下选取文件?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:55:20