searchfs
— это инструмент командной строки macOS для быстрого поиска по имени файла на всех томах APFS и HFS+. Поиск происходит на уровне драйвера с использованием каталога файловой системы. Это означает, что дерево каталогов тома можно сканировать гораздо быстрее, чем при стандартном рекурсивном поиске по имени файла с помощью find
.
По умолчанию поиск нечувствителен к регистру. Соответствующие файлы выводятся в стандартный вывод в том порядке, в котором они находятся в каталоге. Подробности смотрите на странице руководства.
KatSearch — это собственное графическое приложение для macOS, созданное на основе searchfs
.
git clone https://github.com/sveinbjornt/searchfs.git
cd searchfs
make
make install
Устанавливает двоичный файл в /usr/local/bin/
. Страница руководства находится в /usr/local/share/man/man1/
.
Согласно моим тестам, searchfs
работает примерно на 35-50% быстрее, чем find
в файловых системах APFS, и во много раз быстрее в HFS+.
Ниже приведены результаты тестов на MacBook Pro Retina 2012 года выпуска с твердотельным накопителем Apple емкостью 512 ГБ и файловой системой APFS, содержащей около 2 миллионов файлов:
$ 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 добавила поиск по каталогу файловой системы в Mac OS с введением иерархической файловой системы (HFS) еще в 1985 году. HFS заменила предыдущую структуру плоской таблицы в старой файловой системе MFS файлом каталога, использующим структуру B-дерева. В отличие от файловой системы FAT Windows, HFS (а позже и HFS+) организовала все дерево каталогов в один большой файл на диске со связанными между собой узлами, которые не соответствовали иерархической структуре папок. Это означало, что тома можно было искать очень быстро, независимо от их размера.
Классическая Mac OS предоставила эту функциональность через функцию FSCatalogSearch(), которая эффективно перебирала узлы, тем самым сводя к минимуму время поиска на диске. В эпоху до SSD это давало Mac значительное преимущество в производительности перед Windows, когда дело доходило до полнообъемного поиска. В течение долгого времени FSCatalogSearch оставался доступным в Mac OS X/macOS через API Carbon, но теперь он устарел и не поддерживает APFS, новую файловую систему Apple.
Однако поиск по каталогу как для HFS+, так и для APFS доступен в низкоуровневых системных библиотеках Darwin с помощью функции searchfs(). Программа searchfs
использует эту функцию.
Copyright © 2017-2020 Свейнбьорн Тордарсон <[email protected]>
Распространение и использование в исходной и бинарной форме, с модификациями или без них, разрешено при соблюдении следующих условий:
При повторном распространении исходного кода должно сохраняться вышеуказанное уведомление об авторских правах, этот список условий и следующий отказ от ответственности.
При повторном распространении в двоичной форме должно воспроизводиться вышеуказанное уведомление об авторских правах, этот список условий и следующий отказ от ответственности в документации и/или других материалах, прилагаемых к дистрибутиву.
Ни имя владельца авторских прав, ни имена его участников не могут использоваться для поддержки или продвижения продуктов, созданных на основе этого программного обеспечения, без специального предварительного письменного разрешения.
ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ ОБЛАДАТЕЛЯМИ АВТОРСКИХ ПРАВ И УЧАСТНИКАМИ «КАК ЕСТЬ», И ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ ТОВАРНОЙ ГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОТКАЗЫВАЮТСЯ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ ОБЛАДАТЕЛЬ АВТОРСКИХ ПРАВ ИЛИ УЧАСТНИКИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ПРИМЕРНЫЕ ИЛИ КОСВЕННЫЕ УБЫТКИ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПРИОБРЕТЕНИЕ ЗАМЕНЯЮЩИХ ТОВАРОВ ИЛИ УСЛУГ; ПОТЕРЮ ИСПОЛЬЗОВАНИЯ, ДАННЫХ, ИЛИ ПРИБЫЛЬ ИЛИ ПЕРЕРЫВ БИЗНЕСА), КАКОЙ-ЛИБО ВЫЗВАННОЙ И НА ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, КАК ДОГОВОР, СТРОГО ОТВЕТСТВЕННОСТЬ ИЛИ ПРАВИЛЬНОЕ ПРАВОНАРУШЕНИЕ (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ ИЛИ ДРУГОЙ ОБРАЗ), ВОЗНИКАЮЩИЙ ЛЮБЫМ СПОСОБОМ ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ УВЕДОМЛЕНО ОБ ЭТОМ ПРОГРАММНОМ ОБЕСПЕЧЕНИИ. ВОЗМОЖНОСТЬ ТАКОГО ПОВРЕЖДЕНИЯ.