# 如何在 Finder 中同时搜索多个文件夹（附自动化）

> 本文公开全文。

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

macOS 的搜索机制如此完善，兼顾命令行、高级搜索语法、图形化搜索界面和智能文件夹，以至于几乎所有第三方工具引以为傲的搜索功能，基本只是在炒原生功能的冷饭，根本用不着冤枉钱。

但有一个例外。在关于文件管理的旧作中，我不得不为 HoudahSpot 破例，因为它能够同时搜索多个文件夹，而这一功能正是 macOS 的阿喀琉斯。

不过，是时候宣布原生系统在文件搜索领域的彻底胜利：多文件夹搜索其实早有途径，答案就在智能文件夹（smart folder）中。

## 何谓多文件夹搜索

搜索者，划定范围，设置条件，仅此而已，如同在一个池子里下网捕鱼。几乎所有讨论都围绕搜索条件，却忽视了池子在哪儿——原生功能也不例外，仅仅提供搜索整台电脑和查找当前文件夹两个选项，不能同时搜索多个目标。由此带来的不便，例言之：鄙人写有一百来篇文章，未及发表，发现其中关于 Keyboard Maestro 几篇引用有误，于是检索关键词 来源文章（此为拟称），苟按 macOS 的规矩，要么在一百多篇文件中搜索，夹杂大量无关文件；要么逐个打开关于 Keyboard Maestro 话题的文件夹，一一搜索。无论何者，都近乎愚蠢。

换言之，当你明知目标文件可能在一个小范围内时，macOS 预设的两种搜索范围，不是过于宽广，就是太过局限。

除了临时一用，多文件夹搜索也可以固定为常驻的智能文件夹。我（根据下文方法）制作了一个汇集多文件夹近期 PDF 文件的智能文件夹，同时显示最近下载或导入的论文、文章和讨论，但是不展示厚重的书籍——这其实是多文件夹搜索的反向应用：选中其他，效果就相当于排除特定文件夹。

## 如何实现多文件夹搜索

多文件搜索基于智能文件夹，此“文件夹”实为保存好的一组搜索条件，可繁可简，日后用到时打开即可过滤文件，而无需重复输入搜索条件。需要澄清，多文件夹搜索并非我独创，曾有人研究过如何排除某个特定文件夹，Hum 也在《同时在 Finder 里搜索几个指定文件夹里的文件介绍了这一技术。相关讨论是本文方案的技术基础之一。

核心在于，陆续有人发现智能文件夹其实是一个纯文本文件，因而有直接修改其内容的可能，突破系统限制、任意划定搜索范围当然也有希望。让我们从零开始这段探索。首先建立一个智能文件夹：在任意一个文件夹中，按下 ‌⌘Command\-F，然后就地保存它——不要输入任何搜索条件，以免掺入没有必要的参数。

随后用文本编辑器打开刚刚创建的智能文件夹，可以看到，其本质上是一段 XML（Extensible Markup Language，可拓展标记语言）文本，其中记录了搜索的两大要素——范围和条件。由于刚才没有输入任何条件，因此目前的条件参数几乎是一片空白，只有范围参数，而这正中下怀。

仔细查看智能文件夹的代码后，可以发现其中有 3 处记录文件夹路径，此为突破点。早已有人发现了这些路径参数，并追加文件夹路径以实现多文件夹搜索，但其方案和更早的一样，很快纷纷失效，然后被归入“新系统下不 work”的奇技淫巧之列，非常可惜。事实上，前面提及的几个方案已经触及核心，只是漏了一些参数——除了需要追加文件路径外，还需要在下图中位置插入 \<string\>\_kMDItemGroupId = 11\</string\> 参数（如已有，则覆盖），表示没有任何预设条件。

总体上，需要下个如下五处：

- 将 \<key\>RawQuery\</key\> 之下的一行修改为\<string\>\_kMDItemGroupId = 11\</string\>；

- 另一处 \<key\>RawQuery\</key\> 之下的一行，作同样修改；

- 在第一次出现路径的地方，换行后追加新文件夹路径，保持格式一致，开头的 /System/Volumes/Data/ 和两边的 \<string\> 也要保留；

- 在第二次出现路径的地方换行追加路径，保持格式一致，这次不需要 /System/Volumes/Datay/；

- 在第三次出现路径的地方，和上一步同样作同样修改。

随后保存修改，并打开智能文件夹。刚刚打开时可能已经有一些搜索结果在其中，可以发看到，此时已经实现了跨文件夹搜索。继续添加进一步的搜索条件，就可以更细致地过滤文件。

## 自动化：用 Keyboard Maestro 同时搜索任意选中的文件夹

理所当然，除了第一次摸索外，我从来没有手动创建、修改过智能文件夹，毕竟这功夫可能重于挨个翻找文件夹——还不考虑写错代码前功尽弃的。可一旦想到智能文件夹本质只是一段纯文本，紧接着的自动化思路也就铺好了。我使用 Keyboard Maestro——大概所有自动化工具都可以，只是 Keyboard Maestro 最简单——将生成智能文件夹的流程打包好，每次使用时，只需选中任意多个文件夹，按下快捷键 ‌⌃Control\-⌥Option\-⌘Command\-F，即可在下载文件夹中获得一个智能文件夹，打开就能跨文件夹搜索。

Keyboard Maestro 动作下载（GitHub）

这个 Keyboard Maestro 动作主要做了三件事：第一，预设一个跨文件夹搜索的智能文件夹模板；第二，从当前所选文件夹中获取其路径，并转换为智能文件夹所需的格式，再替换到模板里；第三，把替换好的纯文本保存为智能文件夹（换个后缀名就行）。

至于在何处存放智能文件夹，我选择了下载文件夹，你可以修改“Write Text to File”步骤中的路径，以便选择其他更方便的位置。以下路径中的 %ICUDateTime%yyyyMMddHHmm% 是一个 Keyboard Maestro 自带变量，表示精确到分钟的时间戳——例如当下就是 ‌202302211707——将时间戳写入只 智能文件夹名称，可以保持其唯一性，不至于被覆盖或和其他智能文件夹混淆。

```
/Users/Min/Downloads/MultiSearch %ICUDateTime%yyyyMMddHHmm%.savedSearch
```

其实，Keyboard Maestro 所用的模块并无特殊之处，在 Shortcuts 中均有对应步骤，因此可以直接照抄（或许需要改两个正则表达式的字符，但也仅此而已）。但 Shortcuts 的 bug 已经多到难以维护的地步，比如带 \. 的路径很可能报错，并且几乎每次升级系统就就要重新做一遍——iCloud 会看心情删除我的变量！既然 Keyboard Maestro 已经解决我的问题，而制作 Shortcuts 版不过是多一点机械复制工作，我就不出手了，留给确实需要 Shortcuts 版本的读者自己尝试。

🛍 我撰写的付费栏目《Keyboard Maestro 进阶指引》正在 UNTAG 售卖，详解 Keyboard Maestro Macro 高级设计思路，欢迎选购：付费内容链接

---

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