# -*- coding: utf-8 -*- """第二遍:对残留的旧路径引用,按 basename 在当前 docs 反查真实落点。""" import os, re, json, collections ROOT = "docs" OLD_DIRS = ["02-产品需求", "03-技术架构", "04-原型设计", "09-部署运维", "10-项目管理", "01-产品设计", "06-测试质量"] # 当前 docs 所有文件:basename -> 完整相对路径列表 basemap = collections.defaultdict(list) for root, _, fs in os.walk(ROOT): for f in fs: full = os.path.normpath(os.path.join(root, f)) rel = os.path.relpath(full, ROOT).replace(os.sep, '/') basemap[f].append(rel) # 扫描残留引用 pat = re.compile(r'(?:%s)/[^\s\)\]]+' % '|'.join(OLD_DIRS)) refs = collections.defaultdict(set) # basename -> set of old refs for root, _, fs in os.walk(ROOT): for f in fs: if not f.endswith('.md'): continue fp = os.path.join(root, f) with open(fp, encoding='utf-8') as fh: for line in fh: for m in pat.finditer(line): oldref = m.group(0) bn = oldref.split('/')[-1] refs[bn].add(oldref) print("残留引用涉及的不同 basename 数:", len(refs)) for bn, olds in sorted(refs.items()): locs = basemap.get(bn, []) status = "FOUND@" + "; ".join(locs) if locs else "*** NOT FOUND (死链?) ***" print("\n%s" % bn) print(" 旧引用:", "; ".join(sorted(olds))) print(" 现状:", status)