Дивлячись на Дельфіна з Baloo, схоже, шукає метадані кожного файлу в його пошуковому домені, навіть якщо ви робите простий пошук імені файлів. Коли я простежити file.soпроцес, я бачу виклики до lstat, getxattrі getxattrзнову для кожного файлу, і навіть для ..записів. Ці системні виклики отримують метадані про файл, який зберігається в іншому місці від імені файлу (ім'я файлу зберігається у вмісті каталогів, але метадані знаходяться у inode ). Запит на метадані файлу кілька разів є дешевим, оскільки дані знаходяться в кеш-диску диска, але може бути значна різниця між запитом метаданих і не запитом метаданих.
findнабагато розумніший. Він намагається уникати зайвих системних дзвінків. Він не дзвонить, getxattrоскільки не здійснює пошук на основі розширених атрибутів. Під час проходження каталогу, можливо, знадобиться викликати lstatневідповідні імена файлів, тому що це може бути підкаталог для рекурсивного пошуку ( lstatце системний виклик, який повертає метадані файлів, включаючи тип файлу, такий як звичайний / каталог / symlink /…). Однак findє оптимізація: вона знає, скільки підкаталогів має каталог з його кількості посилань , і він припиняє дзвінки, lstatяк тільки знає, що пройшов усі підкаталоги. Зокрема, у довідковому каталозі (каталог без підкаталогів)findперевіряє лише імена, а не метадані. Крім того, деякі файлові системи зберігають копію типу файлу у записі каталогу, так що findнавіть не потрібно дзвонити, lstatякщо це єдина інформація, яка йому потрібна.
Якщо ви працюєте findз параметрами, які потребують перевірки метаданих, вона здійснюватиме більше lstatдзвінків, але він все одно не здійснюватиме lstatвиклик у файлі, якщо йому не потрібна інформація (наприклад, тому що файл виключений попередньою умовою відповідність назви).
Я підозрюю, що інші інструменти пошуку GUI, які винаходять findколесо, менш розумні, ніж утиліта командного рядка, яка зазнала десятиліть оптимізації. Принаймні, дельфін досить розумний, щоб використовувати базу даних locate, якщо ви шукаєте "скрізь" (з обмеженням, яке в інтерфейсі не зрозуміло, що результати можуть бути застарілими).