Рассматривая Dolphin с Baloo, он ищет метаданные каждого файла в своей области поиска, даже если вы выполняете простой поиск по имени файла. Когда я отслеживаю file.soпроцесс, я вижу вызовы lstat, getxattrи getxattrснова для каждого файла, и даже для ..записей. Эти системные вызовы извлекают метаданные о файле, который хранится в другом месте, чем имя файла (имя файла хранится в содержимом каталога, но метаданные находятся в inode ). Многократный запрос метаданных файла является дешевым, поскольку данные будут находиться в кеше диска, но между запросом метаданных и отказом от метаданных может быть существенная разница.
findгораздо умнее Он пытается избежать ненужных системных вызовов. Он не будет вызываться, getxattrпотому что не выполняет поиск по расширенным атрибутам. Когда он пересекает каталог, ему может потребоваться вызвать lstatнесоответствующие имена файлов, потому что это может быть подкаталог для рекурсивного поиска ( lstatэто системный вызов, который возвращает метаданные файла, включая тип файла, такой как обычный / directory / symlink /…). Тем findне менее, имеет оптимизацию: он знает, сколько подкаталогов у каталога, по количеству ссылок , и останавливает вызов, lstatкак только узнает, что он прошел все подкаталоги. В частности, в листовом каталоге (каталог без подкаталогов),findпроверяет только имена, а не метаданные. Кроме того, некоторые файловые системы хранят копию типа файла в записи каталога, поэтому findдаже не нужно вызывать ее, lstatесли это единственная информация, которая ему нужна.
Если вы работаете findс опциями, которые требуют проверки метаданных, он будет делать больше lstatвызовов, но он все равно не будет делать lstatвызов файла, если ему не нужна информация (например, потому что файл исключен предыдущим условием). совпадение по названию).
Я подозреваю, что другие инструменты поиска с графическим интерфейсом, которые изобретают findвелосипед, также менее умны, чем утилита командной строки, которая подверглась десятилетиям оптимизации. Dolphin, по крайней мере, достаточно умен, чтобы использовать базу данных locate при поиске «везде» (с ограничением, которое не ясно в пользовательском интерфейсе, что результаты могут быть устаревшими).