glob 批处理文件前,先排除生成目录
· 阅读需 2 分钟
用 glob 做批处理时,大家通常会先想“我该怎么把目标文件匹配出来”。
可 2017 年我自己写这类脚本越来越多之后,反而最警惕另外一件事:是不是把不该处理的生成目录也一起扫进来了。
为什么生成目录最容易变成隐患
因为它们看起来也像普通文件树:
- 结构整齐
- 数量不少
- 后缀往往和源文件一样
如果匹配模式写得太宽,脚本很可能会把产物、缓存、临时目录一起纳入处理范围。
轻一点是效率变差,重一点就是把本来不该改的东西也改了。
我后来更愿意先做什么
在写 glob 模式前,我会先明确列出“绝对不该碰”的目录,例如:
- 构建产物
- 下载缓存
- 临时导出目录
- 第三方依赖目录
也就是说,先画排除边界,再谈命中范围。
小结
glob 的威力在于批量,而批量最怕误伤。
2017 年之后我写这类脚本时,第一反应已经不是怎么多匹配几个文件,而是先把生成目录排除干净。先把不该碰的东西关在外面,脚本才更稳。
这件事还有一个很现实的收益:当脚本执行结果不对时,你能更快判断问题出在匹配范围,还是出在后续处理逻辑。
如果输入集合一开始就混着源文件和产物目录,后面不论出什么怪现象,排查都会变得很慢。先把边界收干净,脚本行为才更容易解释。
