Windows 上有个软件叫Everything,是Voldtools 开发的软件。它极其好用,搜文件结果秒出,几乎成了极客们的必装软件。

我很好奇:

1. 它的原理是什么,为什么能做到搜索结果秒出?

2. 我大概能猜到它是通过建立索引来实现搜索结果秒出的,但是如果建索引,新增的文件更新到索引数据库里就需要时间。但是Everything 能做到新增文件的结果也是秒出的,也就是它是瞬间就完成了新文件的索引创建。它是如何做到全硬盘监控并这么快速建立索引的?

3. Mac上有类似软件吗?(就我所知是没有的)

4. 如果Mac 上没有,是因为苹果的安全限制导致做不到吗?

以上问题我发给ChatGPT后,这是它的回答:

Everything 这个软件确实是 Windows 上的神器。我们可以逐个拆开来看:

1. 它的原理是什么,为什么能做到搜索结果秒出?

核心机制: Everything 并不是像传统的「内容搜索器」(比如Windows 自带的 Search)那样去扫描整个硬盘,而是直接利用 NTFS文件系统的元数据。

关键点:NTFS 有一个特殊的数据库 Master File Table (MFT),里面记录了硬盘上所有文件的路径、大小、时间戳等信息。

Everything 直接读取MFT,把这些元数据加载进内存,然后对文件名建立索引。

因为它只处理文件名(不是全文搜索),并且直接读底层的MFT,所以可以在几秒内建立整个硬盘的索引。后续搜索就是内存里查表,结果当然是「秒出」。

2. 新文件为什么能瞬间被索引?

你猜得没错:一旦涉及动态更新,普通做法是「后台轮询扫描」,那会很慢。但 Everything 另有高招:

Windows 提供了文件系统事件通知机制:

NTFS 支持 USN Journal (Update Sequence Number Journal),它是一个日志文件,记录了文件系统上所有的变化(文件新建、删除、重命名等)。

Everything 持续监听 USN Journal,不需要自己不停扫描。

当文件变化时:Everything 从 USN Journal 里获取事件(比如新文件出现),

然后快速更新自己的内存索引。

所以效果上看:新增文件几乎是瞬间可见。

3. Mac 上有类似的软件吗?

严格意义上讲,没有一个在体验上完全等价于 Everything 的工具。

macOS 有 Spotlight,它会对全盘建索引并且支持文件内容搜索。但

Spotlight 有几个缺点:

。它的索引是异步更新的,新增文件不会立即出现在结果里。

。搜索速度相比 Everything 要慢,尤其是模糊匹配/正则。

社区里常见的替代品:

Alfred / Raycast(更像启动器,不是纯粹的文件搜索)

EasyFind(不依赖索引,但搜索速度不如 Everything)

Find Any File(也比较慢,不是秒出)。

总结: Mac 上没有一个和 Everything一样基于 MFT/Journal 的极速工具。

4. 为什么 Mac 上做不到?是安全限制吗?

是的,这和操作系统底层机制以及安全策略有关:

文件系统层面:

。macOS 的APFS 并没有公开类似NTFS MFT 或USN Journal 这种可直

接快速获取全盘文件变化的接口。

。开发者如果想全盘监控文件变更,只能依赖FSEvents(文件系统事件

API),但它的粒度和速度不如 USN Journal,而且需要额外权限。

安全限制:

所以:

macOS 对第三方应用访问整个文件系统限制很严格(特别是Catalina 之后)。

◎想要全盘索引必须申请 Full Disk Access,且即便拿到了权限,性能和接

口支持也不足以做 Everything 那种体验。

Windows Everything 的魔法,本质上依赖NTFS+ USN Journal 的开放

性别。

一切。

macOS 因为 APFS 缺少类似接口+系统安全沙箱化,所以没人能完全复刻

Comments

Be the first to add a comment