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

如何通过Bash实现Python脚本递归遍历所有子目录执行?

嘿,这个递归遍历子目录运行脚本的需求我熟!之前只能处理一级子目录的脚本确实不够用,我给你两个靠谱的解决方案,保证能覆盖所有层级的子目录,还能满足你对路径的要求~

解决方案1:用绝对路径调用(简单可靠)

这种方式不用纠结相对路径的层级计算,直接把wav.py的路径转换成绝对路径,不管遍历到哪个子目录都能直接调用,省心又不容易出错。

把下面的内容保存成run_wav_recursive.sh脚本:

#!/bin/bash

# 检查用户是否传入了wav.py的路径
if [ $# -ne 1 ]; then
    echo "用法: $0 <wav.py的路径>"
    exit 1
fi

# 将传入的wav.py路径转为绝对路径,避免层级切换导致的路径错误
WAV_PY_ABS=$(realpath "$1")

# 递归遍历当前目录下所有子目录(排除当前目录本身)
find . -type d -not -path '.' | while read -r dir; do
    echo "正在处理目录: $dir"
    # 切换到目标子目录,切换失败则跳过
    cd "$dir" || continue
    # 运行Python脚本
    python "$WAV_PY_ABS"
    # 切回原工作目录(静默输出,避免冗余信息)
    cd - > /dev/null
done

脚本解释:

  • realpath "$1":把你传入的wav.py路径(不管是相对还是绝对)转换成绝对路径,这样后续切换目录后也能精准找到脚本;
  • find . -type d -not -path '.':递归找出当前目录下所有层级的子目录,同时排除当前目录本身,避免重复执行;
  • 循环里的cd "$dir" || continue:确保切换到子目录失败时直接跳过,防止脚本报错中断。

解决方案2:用相对路径调用(符合层级要求)

如果你坚持要让脚本调用路径随目录层级变化(比如子目录用../wav.py,孙子目录用../../wav.py),可以用这个版本:

#!/bin/bash

if [ $# -ne 1 ]; then
    echo "用法: $0 <wav.py的路径>"
    exit 1
fi

# 获取wav.py所在目录的绝对路径
WAV_DIR_ABS=$(realpath "$(dirname "$1")")
# 获取当前工作目录的绝对路径
CURRENT_DIR_ABS=$(realpath .)

# 递归遍历所有子目录
find . -type d -not -path '.' | while read -r dir; do
    echo "正在处理目录: $dir"
    cd "$dir" || continue
    # 计算当前子目录相对于wav.py所在目录的相对路径
    REL_PATH=$(realpath --relative-to . "$WAV_DIR_ABS")
    # 构造wav.py的相对路径
    WAV_PY_REL="$REL_PATH/$(basename "$1")"
    # 用相对路径运行脚本
    python "$WAV_PY_REL"
    cd - > /dev/null
done

这个版本会自动计算每个子目录到wav.py所在目录的相对路径,生成符合层级的调用路径,完全满足你的需求。

快速一行命令版

如果不想写脚本,直接用这条命令就能搞定(在父目录下运行):

find . -type d -not -path '.' -exec sh -c 'cd "$0" && python "$1"' {} "$(realpath ./wav.py)" \;

这条命令的逻辑和解决方案1一致,用find配合-exec直接在每个子目录里调用绝对路径的wav.py。

使用方法

  1. 给脚本添加执行权限:
chmod +x run_wav_recursive.sh
  1. 在父目录下运行脚本,传入wav.py的路径:
./run_wav_recursive.sh ./wav.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:56:01