Spotlight 是 macOS 的系统搜索索引,文件名、元数据与部分内容都由它整理。索引由系统维护,导入器与排除规则都会影响结果。「搜不到」通常是文件未进入索引,或进入后因权限、排除、导入失败而查不到。

先确认是哪种搜不到

先确认文件存在,再判断是索引漏掉,还是内容没被读懂。在终端测试:

mdfind -name "report"
mdfind -onlyin ~/Documents -name "report"

如果能找到,说明文件名已索引,问题多在内容层:扫描版 PDF 没有文字层、图片文字尚未被 Live Text 识别(或语言/格式不受支持),或导入器未提取正文。用内容查询(mdfind "clause")验证,不要急着重建索引。

如果连文件名也找不到,用 mdls /path/to/file 查看 Spotlight 记录的元数据;kMDItemFSName 等核心字段为 null,通常说明它不在索引范围内。mdutil -sa 可查看包括 APFS Data 卷在内的索引状态。Spotlight 支持 mdfind 与 NSMetadataQuery,第三方工具查询系统索引时同样受导入器与排除规则约束。

如果 mdfind 能找到文件,但 Spotlight 界面搜不到,先检查「系统设置」→「聚焦」→「搜索结果」中的类别是否被关闭,再检查 Finder 的搜索范围与筛选条件,最后才考虑重建索引。

七类常见原因

按常见程度排列:

  1. 隐私排除:文件夹在 Spotlight 隐私列表中,目录及子目录都会被跳过。
  2. 以 .noindex 结尾的文件夹:文件夹名以 .noindex 结尾会被排除;卷根的 .metadata_never_index 会让整卷不索引。
  3. 索引关闭或损坏:mdutil 显示关闭,或索引损坏、进程卡住;APFS 的 Data 卷可能单独关闭。
  4. 外置盘或网络盘:卷被排除、首次索引未完成,或网络卷不由本机 Spotlight 索引。
  5. 系统保护目录:部分系统位置和应用数据容器按设计或 TCC 限制不向普通查询开放。
  6. 权限不足:当前用户无权读取,或位置受 TCC 保护。
  7. 刚写入尚未索引:索引异步更新,新文件可能要几秒才出现。

逐项排查与修复

1. 检查隐私排除

打开「系统设置」→「聚焦」→「搜索隐私」(macOS 26/27);macOS 13–15 为「Siri 与 Spotlight」→「Spotlight 隐私」;macOS 12 及更早为「Spotlight」→「隐私」。选中文件夹并点「−」移除。系统会重新导入;几分钟后仍无结果再按第 3 项重建。

2. 处理 .noindex 文件夹

文件夹名以 .noindex 结尾时,Spotlight 会跳过该文件夹及其子目录;卷根的 .metadata_never_index 则让整卷不索引。用 find ~/Documents -type d -name '*.noindex' 或 ls -d ~/Documents/*.noindex 查找。确认后重命名文件夹,去掉 .noindex 后缀即可。卷根标记可能需要 sudo rm /Volumes/ExternalDrive/.metadata_never_index,再用 sudo mdutil -E /Volumes/ExternalDrive 重建。.noindex 在挂载点本身不生效;被刻意排除的 NVR、虚拟机或媒体库目录若重新索引,可能造成大量索引负载甚至不稳定。

3. 检查并重建索引

运行 mdutil -sa 查看所有卷;mdutil -s / 可能只报告 /,而 APFS 的 /System/Volumes/Data 会单独索引或关闭。可用 sudo mdutil -s /System/Volumes/Data 确认;若关闭,先用 sudo mdutil -i on /System/Volumes/Data 启用,再用 sudo mdutil -E /System/Volumes/Data 重建。sudo mdutil -Ea 会重建所有卷,耗时更长。重建只重新生成索引,不改动文件,且在后台运行。完成后用 mdfind -name 验证。

4. 外置盘与网络盘

外置卷先确认不在隐私列表中,再用 sudo mdutil -s /Volumes/DriveName 查看,必要时启用并重建。新盘可能仍在首次索引。SMB/AFP 网络卷通常不由本机 Spotlight 建立完整索引,能否搜索取决于服务器;文件在 NAS 上时,Finder 或服务器端搜索更可靠。macEverything 本身只扫描主文件夹和 /Applications,不支持外置盘与网络盘。

5. 系统保护目录

部分系统位置和应用数据容器按设计或 TCC 限制不对普通查询开放;通常不是故障。SIP 保护系统文件不被修改,并不是 Spotlight 隐藏任意文件的开关。不要为此关闭 SIP;可用 Finder 的「前往文件夹」(⇧⌘G)或终端访问;读取仍取决于权限。

6. 权限不足

如果 ls -ld /path 显示当前用户没有读取或执行权限,Spotlight 与 mdfind 都可能看不到其中的文件;用 Finder「显示简介」→「共享与权限」修正。邮件、信息等位置还受 TCC 保护,终端或第三方工具需在「隐私与安全性」→「完全磁盘访问权限」中获准。macEverything 不强制要求该权限:未授权时,结果窗口状态栏会显示缺口数量,点开可查看目录;授权后重启引擎(macEverything stop && macEverything start),索引才会补充这些位置。CLI 需已安装并在 PATH 中,或使用 App 包内的 Contents/MacOS/macEverything。

7. 刚写入的文件

Spotlight 异步更新索引,保存后立刻搜索可能扑空,等几秒再试。也可请求导入并查看元数据:

mdimport ~/Documents/report.pdf
mdls -name kMDItemFSName -name kMDItemContentType ~/Documents/report.pdf

若 mdls 仍显示未索引,回到排除、卷状态与权限检查。服务器挂载目录、被排除目录,以及写入后立即删除或改名的临时文件,可能永远不进入索引。

Spotlight 与文件名搜索的分工

Spotlight 强在内容与元数据:邮件、日历、备忘录、应用设置和支持的文档正文都能搜。macEverything 本身只按文件名搜索:它为主文件夹与 /Applications 建立本地索引,默认排除 ~/Library、node_modules 与 .git,通过 FSEvents 增量更新。

在 Apple M5、约 128 万条目的测试集上,首次扫描 100 万个文件约需 1.0–1.6 秒,查询 P99 为 2.9–3.6 毫秒,目录变化后 0.3 秒内可搜到;界面常驻内存约 136 MB。它支持通配符、路径与整词,但不支持正则,也不索引外置盘或网络盘。

两者互补而非替代:知道文件名时用 macEverything,记得文中某句话时用 Spotlight。两者索引独立,可同时使用。