跳到正文
MyDSH我的 DSH 实战笔记
English
独立维护,非DeepSeek官方;与mydsh.dev等其他MyDSH站点无关联。

首页/工作区与文件/批量与长目录

目录层级过深:13 层还能读,但路径会变长

项目目录层层嵌套,担心遍历时漏掉深层文件,或者路径太长出错。

已核验版本与环境核验日期2026-11-14
工具
Python 3.13 + pymupdf
样本
13层嵌套,最深层放一份PDF
核验日期
2026-11-14

可复制指令

find pdfs -type f -name '*.pdf' | wc -l

实测结果: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条尤其重要:只报文件名会在有同名文件时骗过你。

还有一个隐性代价:路径越长,模型看到的内容里「路径噪音」占比越高,真正有用的信息被稀释。深层目录建议先复制到一个扁平临时目录再处理。

怎么算跑通

照着逐条对,全过才算完成。有一条没过,先解决它再往下。

  • find的数量与脚本报的数量相等
  • 产物里是相对路径而不是裸文件名
  • 排除项有明确记录

会失败在哪

现象 / 原因 / 怎么办,按实际踩到的顺序写。

现象原因怎么办
Windows上长路径报错路径总长超过传统API限制缩短中间目录名,或启用长路径支持
遍历卡住不动符号链接成环遍历时用realpath记录已访问路径

来源

标「已核验」的,来自本站实跑;标「公开资料整理」的,逐条附出处。