Patrząc konkretnie na Dolphin z Baloo, wydaje się, że wyszukuje metadane każdego pliku w domenie wyszukiwania, nawet jeśli wykonujesz proste wyszukiwanie nazw plików. Kiedy prześledzić file.so
proces, widzę wywołań lstat
, getxattr
i getxattr
znowu dla każdego pliku, a nawet do ..
wpisów. Te wywołania systemowe pobierają metadane dotyczące pliku, który jest przechowywany w innym miejscu niż nazwa pliku (nazwa pliku jest przechowywana w zawartości katalogu, ale metadane znajdują się w i- węzle ). Wielokrotne sprawdzanie metadanych pliku jest tanie, ponieważ dane znajdowałyby się w pamięci podręcznej dysku, ale może istnieć znacząca różnica między pytaniem o metadane a nie pytaniem o metadane.
find
jest znacznie mądrzejszy. Stara się unikać niepotrzebnych wywołań systemowych. Nie zadzwoni, getxattr
ponieważ nie wyszukuje na podstawie rozszerzonych atrybutów. Podczas przeglądania katalogu może być konieczne wywołanie lstat
niepasujących nazw plików, ponieważ może to być podkatalog do przeszukiwania rekurencyjnego ( lstat
jest to wywołanie systemowe, które zwraca metadane pliku, w tym typ pliku, taki jak zwykły / katalog / symlink /…). Jednak find
ma optymalizacja: wie ile podkatalogów katalogu ma od jego liczby łącza i przestanie dzwoni lstat
raz wie, że jest to ruch wszystkie podkatalogi. W szczególności w katalogu typu liść (katalogu bez podkatalogów),find
sprawdza tylko nazwy, a nie metadane. Ponadto niektóre systemy plików przechowują kopię typu pliku we wpisie katalogu, więc find
nawet nie musi dzwonić, lstat
jeśli jest to jedyna potrzebna informacja.
Jeśli uruchomisz find
z opcjami wymagającymi sprawdzenia metadanych, wykona więcej lstat
połączeń, ale nadal nie wykona lstat
połączenia z plikiem, jeśli nie potrzebuje informacji (na przykład dlatego, że plik jest wykluczony na podstawie poprzedniego warunku dopasowanie do nazwy).
Podejrzewam, że inne narzędzia wyszukiwania GUI, które odkrywają find
koło, są mniej sprytne niż narzędzie wiersza poleceń, które zostało poddane dekadom optymalizacji. Przynajmniej Dolphin jest wystarczająco sprytny, aby korzystać z lokalizowanej bazy danych, jeśli wyszukujesz „wszędzie” (z ograniczeniem, które nie jest jasne w interfejsie użytkownika, że wyniki mogą być nieaktualne).