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

如何编写Bash for循环遍历目录下所有子目录执行分析任务?

批量处理子目录的Bash循环优化方案

嘿,我帮你优化一下这个批量处理的Bash循环——手动列48个目录名实在太折腾了,先看看你的场景:

我有一个目录,其中包含48个子目录,示例目录结构如下:

output$ ll
total 0
drwxr-sr-x+ 1 xxx 576 Apr 27 16:39 ./
drwxrws---+ 1 xxx 254 May 4 15:12 ../
drwxrws---+ 1 xxx 28 Apr 19 16:31 404904/
drwxrws---+ 1 xxx 28 Apr 19 16:31 404905/
drwxrws---+ 1 xxx 28 Apr 19 16:31 405003/
drwxrws---+ 1 xxx 28 Apr 19 16:31 405050/
drwxrws---+ 1 xxx 28 Apr 19 16:31 405077/
...

我希望编写一个Bash for循环,在这些子目录中执行通用分析任务,初步写法示例如下:

for d in {404904,404905,405503,...}; do
    echo $d
    # do...的内容
done

下面给你几个更高效的实现方案,根据你的实际目录情况选就行:

方案1:自动匹配所有数字命名子目录(无干扰目录时用)

如果当前目录下只有这些数字命名的子目录,没有其他无关目录,直接用通配符遍历最省心:

for d in [0-9]*/; do
    echo "Processing directory: $d"
    # 在这里写你的分析任务代码,举两个常用写法:
    # 写法1:进入目录执行任务后返回
    pushd "$d" || continue  # 进入失败就跳过
    ./run_analysis.sh       # 你的分析脚本
    popd                     # 回到上级目录

    # 写法2:直接传入目录路径给脚本
    # ./run_analysis.sh "$d"
done

[0-9]*/ 会匹配所有以数字开头的子目录,末尾的/确保只选目录而非文件

方案2:精准匹配特定格式的目录

如果目录都是40xxxx这种6位数字格式,且存在其他无关目录,可以用更精准的通配符:

for d in 40[0-9][0-9][0-9][0-9]/; do
    echo "Processing directory: $d"
    # 执行你的分析任务
done

这个模式只会匹配以40开头、后面跟4位数字的子目录,不会误处理其他目录。

方案3:用数组指定精确目录列表(目录不规律时用)

如果目录名没有统一规律,或者需要排除个别目录,把所有目标目录放进数组里更稳妥,还能加存在性检查避免报错:

# 把48个目录名依次放进数组里
target_dirs=(
    404904
    404905
    405003
    405050
    405077
    # 继续添加剩下的目录...
)

for d in "${target_dirs[@]}"; do
    if [ -d "$d" ]; then
        echo "Processing directory: $d"
        # 执行分析任务
    else
        echo "Warning: Directory $d does not exist, skipping..."
    fi
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:21:14