跳到主要内容

glob 批处理文件前,先排除生成目录

· 阅读需 2 分钟
一介布衣
全栈开发者

用 glob 做批处理时,大家通常会先想“我该怎么把目标文件匹配出来”。
可 2017 年我自己写这类脚本越来越多之后,反而最警惕另外一件事:是不是把不该处理的生成目录也一起扫进来了。

为什么生成目录最容易变成隐患

因为它们看起来也像普通文件树:

  • 结构整齐
  • 数量不少
  • 后缀往往和源文件一样

如果匹配模式写得太宽,脚本很可能会把产物、缓存、临时目录一起纳入处理范围。
轻一点是效率变差,重一点就是把本来不该改的东西也改了。

我后来更愿意先做什么

在写 glob 模式前,我会先明确列出“绝对不该碰”的目录,例如:

  • 构建产物
  • 下载缓存
  • 临时导出目录
  • 第三方依赖目录

也就是说,先画排除边界,再谈命中范围。

小结

glob 的威力在于批量,而批量最怕误伤。
2017 年之后我写这类脚本时,第一反应已经不是怎么多匹配几个文件,而是先把生成目录排除干净。先把不该碰的东西关在外面,脚本才更稳。

这件事还有一个很现实的收益:当脚本执行结果不对时,你能更快判断问题出在匹配范围,还是出在后续处理逻辑。
如果输入集合一开始就混着源文件和产物目录,后面不论出什么怪现象,排查都会变得很慢。先把边界收干净,脚本行为才更容易解释。