# FoxTrot 如何实现多文件搜索

> 本文公开全文。

原文：https://utgd.net/article/21008

几乎在任何涉及搜索的场景下，我们总是面临着两难处境：要么只能限于一个目标，要么就是往整个区域撒大网。对此问题并不敏感的读者，不妨设想一个场景：你面对着前手同事交来的流水档案，里面有几百个文件夹，你想要的材料可能在今年1月、2月、3月、4月、5月或6月这六个文件夹中；在多数文件搜索工具中，你要么逐一翻找这六个文件夹，要么直接在包含几百个文件夹的大资料夹里搜索。两者都不是好主意。

国外很早就有人 hack 过 macOS 的原生智能文件夹，并发现了线索，后来 Hum 在中文圈中较早发表了《同时在 Finder 里搜索几个指定文件夹里的文件》，我也发布了自己版本的自动化方案《如何在 Finder 中同时搜索多个文件夹（附自动化）》和原理不同的《让 LaunchBar 支持中文文件搜索》。

就文件级别的搜索而言，以上努力已经足够。但在 FoxTrot 这类更专业的亚文件级文件搜索工具中，问题转化成了：如何同时搜索多个文件？还原一下我的工作场景：我有几百本参考书，我依稀记得某个经典案例不是在去年某一期的杂志上，就是收录在某位学者的专著中，但在默认搜索方式中，我要么一本一本检索候选书籍，要么直接撒大网，然后再过滤无数的搜索结果。

指定复数个文件？甚至 FoxTrot 都不相信自己能轻松做到。我也曾打算偃旗息鼓，直到我发现，其实答案已经隐藏在 FoxTrot 的搜索语法——准确说是正则表达式——中。而语法又暗示着自动化的可能性，我很快制作了 LaunchBar 和 Keyboard Maestro 版本的自动化动作，终于可以指定检索 FoxTrot 数据库中的任意复数个文件。

- LaunchBar 版下载（不细分版本）

- Keyboard Maestro 版下载（分 Finder 版和 FoxTrot 内部版）

还有一个好消息：在打包封装后，你已经一劳永逸，不再需要反复输入本文即将展示的复杂语法。

## 从手工到语法

事情始于一个简单的信念：在 FoxTrot 这种高级工具中，如果你能用图形界面完成一件事，那么就有可能将其转化为机器更易读的语法，进而实现自动化。且听我一步一步说明。

我很早就意识到，FoxTrot 可以添加多组搜索条件，且之间的逻辑关系也可以自行设置，就多文件搜索而言，事情并不复杂：一方面，在默认条件组中正常搜索关键词；另一方面，添加一个只搜索文件名的条件组，填上你想搜索的所有文件名称。整个过程很像 Finder 的复杂条件搜索。

假设我只想找 李建伟 公司诉讼类型化专题24讲（三）\.pdf 和 赵旭东 新公司法重点热点问题解读\.pdf 两本书中的内容，那么我可以用一段正则表达式 "李建伟 公司诉讼类型化专题24讲（三）\.pdf"\|"赵旭东 新公司法重点热点问题解读\.pdf" 同时搜索两书。注意，此时已经有了语法化的端倪。

我们再引入两个事实。第一，FoxTrot 早已接轨了国际惯例，可以用空格连接多个关键词，此事姑且不足挂齿；另一件事才直达核心：文件名具有高度排他性——即便没有，你也可以，或者应该善加重命名，让它有——如果你输入文件名，那么你很可能只会搜到那本书。配合语法，就可以搜索多本指定的书。特别是在 FoxTrot 所索引的专业参考资料文件夹中，我很难想象谁会往里面丢“未命名\.pdf”或“新建\.doc”这类不明所以的鬼东西。

```
"李建伟 公司诉讼类型化专题24讲（三）.pdf"|"赵旭东 新公司法重点热点问题解读.pdf" {69} "合伙" "对赌"
```

抽象之后，多文件搜索的语法形如下：

```
"文件名A"|"文件名B"|"文件名C" 其他关键词
```

其中，连接 "文件名A"、"文件名B" 和 "文件名C" 的符号 \| 表示逻辑或，匹配任一名称的文件都会被找到。而在文件名两侧加上英文直角双引号，则是为确保精确匹配，同时避免文件名中的空格破坏了 FoxTrot 语法，毕竟，未被引号包裹的空格会被当作逻辑和（AND）。

其他关键词 部分也可以包含其他语法，我习惯使用 \{69\} "关键词A" "关键词B"，这表示仅搜索在 69 字符范围内同时出现 关键词A 和 关键词B 的文件，以确保搜索结果具有较高相关性，略去那些在开头出现A、末尾才出现B的低相关性书籍。我提供的搜索模板也包含了前述语法——说白了就是懒得维护自己和对外老套版本——不喜欢的读者可参考 FoxTrot 进阶语法自行调整。

或许上述内容已经引发了部分读者的恐惧，但不必担心，因为语法化的下一步自然就是自动化。我们将完全略去输入语法的环节。

## 从语法到自动

至此，我们还需提到一个事实：FoxTrot 支持 AppleScript，你只要写好整段搜索语句，然后把它丢给 FoxTrot 就好；那么，自动化工具所做的，无非就是把文件转化为搜索语句，并提供给 FoxTrot。说到底，这只是字符串的排列组合以及格式转换，不值着墨，诸位只需知道，我们最后得到了两种多文件搜索方案。

第一种是直接在 Finder 中选定文件——显然，你需要先用 FoxTrot 索引过它们，索引机制是 FoxTrot 工作的第一前提——然后触发自动化动作，旋可移步 FoxTrot，此时已经过滤出了目标文件，你只需接着输入其他关键词。我经常只需检索某几期的杂志，或只想看民法典司法解释配套的理解与适用书籍，此时我就会先挑出它们，避开无关参考资料。

第二种在 FoxTrot 内部使用，例如已经通过初步搜索确定了目标书籍后，可以进一步选定文件，接下来只深度挖掘制定文件的内容。

图中难以呈现搜索的完整过程，且恕我澄清：我的 FoxTrot 内部多文件搜索策略分两步，第一步用粗略的关键词找出相关文件（本质上是文件层级的搜索），第二步在挑选出的小范围文件中深度搜索（进入亚文件层级），此时需换用更精确的关键词，以精准找出相关页面甚至段落。

如果你更喜欢用 LaunchBar 浏览文件——一种不打开 Finder 的文件浏览方式——也可以直接在 LaunchBar 导航或搜索结果列表中选定待搜索的文件。

至于其他的启动器，例如 Alfred 或 Raycast，只要它们没有整什么幺蛾子，老老实实提供正常格式的文件路径，理论上也可以挪用本文的 LaunchBar 方案。当然，这些功课，还是留给实际使用前述工具的人去做吧。

---

[前往标准阅读页](https://utgd.net/article/21008?audience=web)
