实测结果:13层目录、绝对路径87个字符,正常读到,没有漏读也没有报错。
所以「层数深」本身不是问题。真正会出问题的是另外两件事:
| 真正的风险 | 表现 | 怎么防 |
|---|---|---|
| 路径总长度超限 | Windows传统API限制约260字符,超出报错或截断 | 路径接近200字符时就要警觉;用长路径前缀或缩短中间目录名 |
| 符号链接与循环 | 遍历进入死循环,或者重复处理同一个文件 | 遍历时记录已访问的真实路径(realpath) |
| 权限不一致 | 个别子目录不可读,整个遍历中断 | 逐个try/except,把不可读的目录记进失败清单 |
| 隐藏文件与系统目录 | 把 .git、node_modules里的东西也算进去 | 明确排除规则,并在产物里写清排除了什么 |
怎么验证「没漏读」
不要相信「处理完了」这句话。用两个独立的数对一下:
# 用系统自己的遍历数一遍 find pdfs -type f -name '*.pdf' | wc -l # 用它报的数量 # 两个数相等,才算没漏
如果 find 数出来100而脚本说98,那两份在哪、为什么被跳过,就是接下来要查的。
配方里的稳妥写法
遍历 pdfs/ 下所有 PDF,包括子目录,最多深入 10 层。 要求: 1. 输出每个文件的完整相对路径,不只是文件名——同名文件在不同子目录很常见。 2. 排除 .git 与 node_modules,并在末尾说明排除了多少个。 3. 遇到不可读的文件或目录,记进失败清单,不要中断整个遍历。 4. 最后一行写:遍历到 N 个文件,成功 X,失败 Y。
第1条尤其重要:只报文件名会在有同名文件时骗过你。
还有一个隐性代价:路径越长,模型看到的内容里「路径噪音」占比越高,真正有用的信息被稀释。深层目录建议先复制到一个扁平临时目录再处理。