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

如何遍历d066到d166命名的子文件夹,逐个对内部文件执行指定函数?

问题根因
  • 循环范围设置错误:你需要处理的是d066到d166,但是当前循环写的是{60..166},会尝试进入不存在的d060到d065文件夹
  • 错误退出逻辑不合理:cd $var2 || exit 碰到不存在的文件夹会直接终止整个脚本,而不是跳过当前错误文件夹继续执行
  • 路径切换风险高:多次cd切换目录,一旦任意步骤(比如gd2e.py执行过程中意外修改了工作目录、或者cd $var2失败后仍执行了cd ..)都会导致后续路径全部错乱,甚至直接退出到上层目录后找不到目标子文件夹,触发exit逻辑直接终止脚本。
稳妥实现方案

推荐从根源避免工作目录切换的风险,优化后脚本如下:

#!/bin/bash
# 循环范围调整为实际需要的66到166
for i in {66..166}; do
    # 用printf自动补前导0生成文件夹名,无需单独判断数值大小
    dir_name=$(printf "d%03d" $i)
    # 文件夹不存在直接跳过,不终止整个任务
    if [ ! -d "$dir_name" ]; then
        continue
    fi
    # 直接获取文件夹内第一个文件,无需进入目录
    target_file=$(find "$dir_name" -type f | head -n 1)
    if [ -z "$target_file" ]; then
        echo "警告:$dir_name 内无有效文件,跳过"
        continue
    fi
    # 用子shell执行目录切换和命令,子shell内的目录变更不会影响父shell的工作路径
    (
        cd "$dir_name" || exit 1
        gd2e.py -rnxFile "$(basename "$target_file")"
    )
done
优化点说明
  • 文件名生成逻辑更简洁,用printf自动格式化补0,减少分支判断出错概率
  • 增加文件夹、文件存在性校验,异常场景直接跳过,不会中断整个批量任务
  • 子shell隔离目录操作,父shell始终停放在所有子文件夹的上层目录,不会出现路径错乱退出的问题
  • 所有变量加双引号包裹,兼容文件名/文件夹名带空格的场景

内容的提问来源于stack exchange,提问作者Nihilum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:02