Cardinal: macOS 的快速文件搜索(已开源)

2025 年 11 月 7 日
 ldm0

从 Windows 迁移到 macOS 后一直想有一个 macOS 的 Everything ,踩了很多坑之后终于实现出来了(磨磨唧唧写了 N 久)。

我自己用了有一段时间了,确实帮我解决了 Spotlight 搜索不到一些文件的问题,而且速度也够快,我自己很喜欢,所以分享给大家。

实现过程中走了很多弯路,如果最近事情不多的话,找时间分享一下踩坑历程和实现思路 :D

目前项目已开源:https://github.com/ldm0/cardinal,大家可以在 release 页面下载。

5484 次点击
所在节点    分享创造
66 条回复
Mangozhen
2025 年 11 月 7 日
下载了,来试一试。
astrodaw
2025 年 11 月 7 日
体验不错,略微有点卡顿但是可以接受。

我此前一直用的 Alfred 的 find 命令来替代 macOS 的 Everything ,和楼主的软件使用体验大差不差。
Mangozhen
2025 年 11 月 7 日
@Mangozhen 非常棒的一个 APP ,确实有 Everything 那个味儿了。初步体验了一个小时,有以下反馈:

1. 初始化要的时间比较长,我这边大约 400 万个文件,花费了差不多 45 分钟来建立索引;
2. 当前版本似乎不支持后台运行。推出后立即进入,会卡顿一下(大约是更新索引)。
3. 特别想要能够自动进行关键词匹配,而不是完全匹配搜索。
dxppp
2025 年 11 月 7 日
支持一下
ldm0
2025 年 11 月 7 日
感谢反馈~
> 初始化要的时间比较长,我这边大约 400 万个文件,花费了差不多 45 分钟来建立索引;
这个还比较奇怪,正常不会有这么慢,我的电脑 700 万个文件应该是 11 秒索引完。有插存储卡之类的东西嘛。
> 当前版本似乎不支持后台运行。推出后立即进入,会卡顿一下(大约是更新索引)。
是加载磁盘里的缓存。
> 特别想要能够自动进行关键词匹配,而不是完全匹配搜索。
是说分词+模糊匹配嘛
LLSY
2025 年 11 月 7 日
下载了,star 了,支持一下
rj
2025 年 11 月 7 日
下载支持
Mangozhen
2025 年 11 月 7 日
@ldm0 对的。在 Spotlight 上,我只需要舒服“A B”,会自动帮我把包含“A”和“B”两个关键词的文档抓出来(包括文档内容)。

这个功能我真的离不开。因为很多时候我都是靠记忆的关键词来检索很久没用的文档。这也是为什么我至今一直使用的 Spotlight ,而没有使用其它类似的工具。
duxiansen
2025 年 11 月 7 日
我的索引也很慢,看了下,好像是在检索 iCloud 云盘的时候,触发了下载。后面能不能增加屏蔽某些目录的功能?
ldm0
2025 年 11 月 7 日
@Mangozhen
> 这个功能我真的离不开。因为很多时候我都是靠记忆的关键词来检索很久没用的文档。这也是为什么我至今一直使用的 Spotlight ,而没有使用其它类似的工具。

这个软件主要提供了文件路径子串搜索(比如匹配"/Applications/Xcode.app/Contents/Developer" 路径中的 ".app/Contents/Develop")和正则搜索的支持,这也是 Everything 的最核心功能。

如果要实现分词,搜索的能力感觉就不那么“确定性”了,用起来心里会虚虚的,和设计的初衷有些差别。SpotLight 可能会出现有某个文件但是搜索不到或者搜索不全的情况。Cardinal 和 SpotLight 的最主要差别就是其用起来的感觉是“确定性”的,能搜到就是有,搜不到就是没有。

比如说我开发过程会产生一些细碎文件,SpotLight 在这种场景下更新索引总是不够实时,容易找不到文件,Cardinal 就 100%能找到,只要存在于文件系统上的文件都不会丢失。

因为面向的需求不一样,所以形态和实现都会有差别~
ldm0
2025 年 11 月 7 日
@duxiansen 这个我操作一手。检索 iCloud 应该不会下载(因为只是 readdir),应该是缩略图获取才会触发。

这个我用 OneDrive 的时候发现了类似的情况,之前在代码里加了判断。我本地测试一下 iCloud 。
ziyanghua
2025 年 11 月 7 日
star 支持一下
ldm0
2025 年 11 月 7 日
@duxiansen https://github.com/ldm0/cardinal/releases/tag/v0.1.1 发了个新版,可以再试试看~
duxiansen
2025 年 11 月 7 日
这修复的效率真高。试了下,现在索引很快了
Heanes
2025 年 11 月 7 日
没有排序选项吗?恳求加 feature
ldm0
2025 年 11 月 7 日
@Heanes 由于 APFS 的 lstat 接口太慢了(被 NTFS 暴打),没有办法在构建索引时全量获取文件 metadata 。如果苹果不优化的话,没有办法全量排序。因此折中提供了一个 events panel (里面有最新更新的文件列表)

但是搜索结果的排序我会加下(比如搜索结果小于 1w 个时可以根据 path/mtime/ctime 排序),这个在 todo list 上。
clementewy
2025 年 11 月 7 日
这个厉害了,能搜 smb 文件,虽然还比较慢
clementewy
2025 年 11 月 7 日
真好用,能否增加目录屏蔽功能,很多目录其实不需要索引。
ldm0
2025 年 11 月 7 日
@clementewy 可以~晚上下完班加一手
rainfox
2025 年 11 月 7 日
已经放弃 Intel 版本的了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1171095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX