searchfs
是一个 macOS 命令行工具,可在整个 APFS 和 HFS+ 卷上按文件名快速搜索。使用文件系统目录在驱动程序级别进行搜索。这意味着卷的目录树的扫描速度比使用find
进行标准递归文件名搜索要快得多。
默认情况下,搜索不区分大小写。匹配文件按照在目录中找到的顺序打印到标准输出。有关详细信息,请参阅手册页。
KatSearch 是一个基于searchfs
构建的本机图形 macOS 应用程序。
git clone https://github.com/sveinbjornt/searchfs.git
cd searchfs
make
make install
将二进制文件安装到/usr/local/bin/
中。手册页进入/usr/local/share/man/man1/
。
根据我的基准测试, searchfs
运行速度比 APFS 文件系统上的find
快 35-50%,在 HFS+ 上快很多倍。
以下是 2012 年 Retina MacBook Pro 的基准测试结果,配备 Apple 提供的 512 GB SSD,运行包含约 200 万个文件的 APFS 文件系统:
$ time searchfs " something "
0,01s user 33,15s system 32% cpu 1:23,59 total
$ time find / -name " *something* "
9,53s user 67,64s system 49% cpu 2:37,39 total
尽管我还没有对此进行正确测试, searchfs
可能比硬盘驱动器上的find
快得多,因为硬盘驱动器的寻道时间更长。在具有少量文件的文件系统上,它确实也非常快。
Apple 早在 1985 年就通过引入分层文件系统 (HFS) 在 Mac OS 中添加了文件系统目录搜索。HFS 使用 B 树结构的目录文件取代了旧 MFS 文件系统中以前的平面表结构。与 Windows 的 FAT 文件系统不同,HFS(以及后来的 HFS+)将整个目录树排列成磁盘上的一个大文件,其相互链接的节点与分层文件夹结构不匹配。这意味着无论大小如何,都可以非常快速地搜索卷。
经典 Mac OS 通过 FSCatalogSearch() 函数公开此功能,该函数在节点上高效迭代,从而最大限度地减少磁盘寻道时间。在 SSD 时代之前,这使得 Mac 在全卷搜索方面比 Windows 具有显着的性能优势。很长一段时间以来,FSCatalogSearch 一直通过 Carbon API 在 Mac OS X / macOS 中提供,但现在已被弃用,并且不支持 Apple 的新文件系统 APFS。
然而,HFS+ 和 APFS 的目录搜索可通过 searchfs() 函数在 Darwin 的低级系统库中使用。 searchfs
程序利用了这个函数。
版权所有 © 2017-2020 Sveinbjorn Thordarson <[email protected]>
如果满足以下条件,则允许以源代码和二进制形式重新分发和使用,无论是否经过修改:
源代码的重新分发必须保留上述版权声明、此条件列表和以下免责声明。
以二进制形式重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表以及以下免责声明。
未经事先书面许可,版权所有者的姓名及其贡献者的姓名均不得用于认可或推广源自本软件的产品。
本软件由版权所有者和贡献者“按原样”提供,不承担任何明示或默示的保证,包括但不限于适销性和特定用途适用性的默示保证。在任何情况下,版权持有者或贡献者均不对任何直接、间接、附带、特殊、惩戒性或后果性损害(包括但不限于采购替代商品或服务;使用、数据或利润损失;或其他损失)承担责任。或商业中断),无论是何种原因造成的,并且基于任何责任理论,无论是合同责任、严格责任还是侵权行为(包括疏忽或其他),均因使用本软件而产生,即使已被告知可能发生此类损害。