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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:12:07