Mac 上的搜索入口不止一个:Finder、⌘Space 唤起的 Spotlight、终端的 mdfind 与 find,以及按文件名工作的 macEverything。先分清索引来源和搜索对象,再决定用哪个。
Finder 搜索
在 Finder 窗口按 ⌘F,或点工具栏的搜索框即可开始。Finder 的搜索范围可配置,默认是「这台 Mac」;可在搜索栏的范围栏收窄到当前文件夹,或在「访达 → 设置 → 高级」中修改默认范围。优势是就地操作:结果可直接预览、打开、拖拽,不必离开文件管理器。
输入关键词后,可用搜索建议,或点「+」按种类、修改日期、名称筛选。Finder 的文件名与内容搜索通常依赖 Spotlight 索引:内容命中需要对应导入器,扫描版 PDF 没有文字层,即使被索引也可能搜不到正文;目录若在 Spotlight 隐私列表中,「这台 Mac」搜索也会漏掉它。
适合:知道文件大致在哪个项目或目录,想边看边缩小范围,或用 Quick Look 确认内容。
Spotlight(⌘Space)
Spotlight 是 macOS 的系统索引,默认用 ⌘Space 唤起。应用、文件名、元数据,以及邮件、日历、备忘录和文档正文都在同一套索引里,也能进入设置与常用操作。记得内容却不知道文件在哪时,它比文件名工具更合适。
索引由系统维护,导入器和排除规则决定什么能进来。可在「系统设置」→「聚焦」调整搜索类别与隐私列表;索引异常时用 mdutil 检查。mdfind 查询同一份索引,同样受导入器与排除规则约束;Spotlight 界面的结果类别开关只影响显示。若界面搜不到,先检查排除和索引状态,更多排查见 Spotlight 搜不到文件。
终端:mdfind 与 find
mdfind 查询 Spotlight 索引,适合已索引的文件名、元数据和正文;find 不读索引,直接遍历指定路径,更适合 Spotlight 排除目录或索引范围外的位置。
mdfind -name "report"
mdfind -onlyin ~/Documents "预算"
mdfind "kMDItemFSName == '*.pdf'c"
find ~/Projects -type f -name "*.ts"
-name 只匹配文件名,-onlyin 限定目录,谓词可组合元数据条件,末尾的 c 表示忽略大小写。find 的 -name 区分大小写,-iname 忽略大小写,-type f 只返回普通文件。它默认会进入 .git、node_modules 和隐藏目录,在大目录上会明显变慢,可用 -prune 跳过。
mdfind 只返回已索引的内容,快但不会比索引更完整;find 更全,代价是每次真正走目录。两者都能配合 xargs 或循环写脚本。
macEverything
macEverything 是 macOS 文件名搜索工具。首次启动时会为主文件夹与 /Applications 建立本地索引,只按文件名匹配。默认排除 ~/Library、node_modules 与 .git:它们聚集了缓存、依赖和版本历史,逐文件收录只会让结果变吵。
索引保存在本地,查询不联网;FSEvents 负责增量更新。⌥Space 打开悬浮搜索条,输入即搜,↑/↓ 选择后回车;⌥⇧F 打开完整结果窗口,可按大小或修改时间排序、多选;空格快速查看,右键可拷贝文件、路径或文件名。随包的命令行读取同一份索引:
macEverything query "报价单"
macEverything status
完全磁盘访问权限可选。未授权时,状态栏会显示缺口数量,点开可查看目录,而不是静默漏掉;授权后需重启引擎(macEverything stop && macEverything start),只重开应用不够。CLI 需在 PATH 中,或调用 App 包内的 Contents/MacOS/macEverything。
限制明确:不索引外置盘和网络盘;支持通配符、路径与整词,不支持正则。范围与限制见 Mac 版 Everything。
在 Apple M5、约 128 万条目的测试集上,首次扫描 100 万个文件约需 1.0–1.6 秒,查询 P99 为 2.9–3.6 毫秒,变化后 0.3 秒内可搜到;界面常驻内存约 136 MB。
它并非 Spotlight 替代品:Spotlight 搜正文、邮件和系统动作,macEverything 只解决「知道文件名,想知道它在哪」。两者可并存。
对比表
四种方式放在一起看,差异主要在索引来源与搜索对象。
| 方式 | 范围 | 速度 | 语法 | 排除规则 | 隐私 |
|---|---|---|---|---|---|
| Finder | 「这台 Mac」(可收窄到当前文件夹);内容搜索依赖 Spotlight 元数据 | 取决于索引与范围;已索引结果通常很快 | 关键词加搜索建议与筛选条件 | 跟随 Spotlight 隐私设置;受保护位置可能不可读 | 本机查询,使用系统 Spotlight 索引 |
| Spotlight | 所有已索引的本地卷;文件名、元数据、邮件、日历、备忘录和部分正文 | 已索引内容通常即时返回;正文取决于导入器 | 关键词与类别过滤;终端可用 mdfind 写谓词 | Spotlight 隐私、.noindex、.metadata_never_index、未索引或关闭索引的卷 | 索引在本机;若开启「聚焦建议」,部分查询可能发送给 Apple,可关闭 |
| mdfind / find | mdfind 查系统索引;find 遍历指定路径,只受读取权限限制 | mdfind 走索引,很快;find 依目录与磁盘而定,可能较慢 | 命令行;mdfind 支持 -name、-onlyin 与谓词,find 使用表达式 | mdfind 受 Spotlight 排除约束;find 默认无排除,会进入 node_modules、.git | 只在本机执行;mdfind 结果来自本地系统索引 |
| macEverything | 主文件夹与 /Applications;仅文件名,不含外置盘/网络盘 | M5、约 128 万条目:首次扫描 1.0–1.6 秒,查询 P99 2.9–3.6 毫秒,变更 0.3 秒内可搜 | 通配符、路径与整词;不支持正则表达式 | 默认排除 ~/Library、node_modules、.git;范围固定 | 索引保存在本地,查询不联网 |
按场景选择
找文件位置。文件就在当前项目里,用 Finder 把范围收窄到当前文件夹最省事;只记得文件名、不确定位置,用 ⌥Space 调出 macEverything;目标可能在主文件夹与 /Applications 之外(macEverything 的索引范围之外),再考虑 Spotlight 或 find。
找内容。记得一句话、一个主题或邮件里的信息,用 Spotlight;要把结果写进脚本,用 mdfind。Finder 的内容搜索也依赖索引质量。
脚本自动化。mdfind 适合系统索引已覆盖的场景,输出一行一个路径;find 适合确定性遍历、不受 Spotlight 排除影响的任务,代价是更慢;macEverything query 适合本地文件名索引。
搜索 Spotlight 排除目录。mdfind 和 Spotlight 都进不去,用 find 遍历(前提是有读取权限),或在 Finder 中打开目录。macEverything 只覆盖主文件夹与 /Applications,且有排除项,不能当作任意目录的索引器。
快速上手
下载 DMG(6.9 MB),拖进「应用程序」即可,需 macOS 13+ 与 Apple 芯片;首次启动会在后台建立索引。⌥Space 唤起悬浮条,输入即搜;⌥⇧F 打开结果窗口。索引保存在本机,删除索引不影响原文件。