Bash脚本遍历文件夹文件:相对路径执行失效求通用方案
解决递归遍历文件夹脚本的相对路径调用问题
你的脚本出现相对路径调用失效的核心原因是:递归时使用$0调用自身,但$0会随当前工作目录变化——当你用相对路径(比如sh ./test.sh folder)启动脚本后,进入子目录再调用$0,系统会在子目录下寻找相对路径的脚本,自然找不到。
修改后的脚本
#!/bin/bash # 预先获取脚本的绝对路径,确保递归调用时路径始终正确 SCRIPT=$(readlink -f "$0") if ! test -d "$1"; then # 输出文件的绝对路径 echo "$(pwd)/$1" else # 进入目标目录,cd失败则直接退出避免错误扩散 cd "$1" || exit 1 for f in *; do # 使用固定的脚本绝对路径递归调用 "$SCRIPT" "$f" done fi
关键修改点
- 固定脚本路径:用
readlink -f "$0"获取脚本的绝对路径并赋值给SCRIPT变量,后续递归调用都用这个绝对路径,彻底避免相对路径的问题。 - 增加错误处理:
cd "$1" || exit 1确保如果进入目录失败(比如权限不足),脚本会直接退出,不会执行后续错误的遍历逻辑。
替代方案(更简洁)
如果不需要手动实现递归逻辑,直接用find命令就能一键遍历所有文件:
find "$1" -type f
内容的提问来源于stack exchange,提问作者user20220951
相关产品推荐
相关产品推荐

