Infos beyond the wall
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