如何让Shell脚本自动遍历当前工作目录(CWD)下的子目录
自动遍历子目录的Shell脚本改造方案
没问题,我来帮你把脚本改成自动遍历当前目录下的所有子目录,不用再手动维护路径数组啦!针对你的Mac OSX环境,这里有两种适配方案,按需选择:
方案1:只遍历当前目录的直接子目录(和原脚本逻辑一致)
把原来的手动数组替换成自动匹配逻辑,同时保留绝对路径的使用习惯,改造后的脚本如下:
#!/bin/sh # 遍历当前目录下的所有直接子目录 for subdir in */; do # 安全判断:确保当前条目是有效目录(避免无匹配时通配符被原样输出) if [ -d "$subdir" ]; then # 将相对路径转换为绝对路径,和原脚本的路径格式保持一致 abs_subdir=$(cd "$subdir" && pwd) echo "Processing directory: $abs_subdir" # 执行你的Python脚本,传入绝对路径参数 python /path/to/pythonscript1.py "$abs_subdir" python /path/to/pythonscript2.py "$abs_subdir" fi done
关键说明:
*/是Shell通配符,会自动匹配当前目录下所有以/结尾的条目,也就是所有直接子目录if [ -d "$subdir" ]; then是容错处理:如果当前目录没有任何子目录,*/会被当作字符串直接返回,这一步会跳过无效条目,避免报错$(cd "$subdir" && pwd)用来把相对路径转成绝对路径,确保和你原脚本的参数格式一致,Python脚本无需修改
方案2:递归遍历所有嵌套子目录(如果需要处理深层目录)
如果你需要处理folder1下所有层级的子目录,用find命令更合适:
#!/bin/sh # 递归遍历当前目录下的所有子目录(排除当前目录本身) find . -type d -mindepth 1 | while read -r subdir; do abs_subdir=$(cd "$subdir" && pwd) echo "Processing directory: $abs_subdir" python /path/to/pythonscript1.py "$abs_subdir" python /path/to/pythonscript2.py "$abs_subdir" done
关键说明:
-type d指定只查找目录-mindepth 1排除当前目录.- 去掉
-maxdepth 1就会递归遍历所有层级的子目录,如果只想遍历直接子目录,加上-maxdepth 1即可
使用方法
- 把改造后的脚本保存为
shellscript.sh - 给脚本添加执行权限:
chmod +x shellscript.sh - 终端中切换到folder1目录:
cd /path/folder1 - 运行脚本:
./shellscript.sh或者sh shellscript.sh
小提示
如果你的Mac上默认Python是Python2(OSX 10.13自带的是Python2.7),而你的脚本需要Python3,记得把脚本里的python改成python3哦!
内容的提问来源于stack exchange,提问作者JepsonNomad
相关产品推荐
相关产品推荐

