Czy istnieje sposób na zwiększenie prędkości „znajdowania”

15

Zastanawiam się, czy istnieje sposób na zwiększenie findprędkości w terminalu, nie ma sensu, aby wyszukiwanie w Internecie za pomocą Google google było szybsze niż wyszukiwanie lokalnych ciągów znaków lub po prostu nazw plików.

Zastanawiam się, czy istnieje sposób na lokalną bazę indeksowania, po zbudowaniu w przyszłości polecenie find może być super szybkie.

Lub jakieś inne sugestie?

Dzięki!

Daniel
źródło
Czy możesz edytować swój post za pomocą systemu operacyjnego i / lub dystrybucji?
Jodie C

Odpowiedzi:

15

Spróbuj użyć locate, powinno robić to, co chcesz.

Wojtek Rzepala
źródło
13
Zazwyczaj dobrym pomysłem jest uszczegółowienie odpowiedzi. Jak wspomnienie, z którego pakietu locatepochodzi (zwykle slocate), i użycie go updatedbdo przebudowania bazy danych. :-)
Patrick
1
To nie działa w przypadku partycji z wyłączonym indeksowaniem. Np. Partycje NTFS mają niską wydajność, jeśli indeksowanie jest włączone, dlatego lokalizowanie nie będzie działać dla tych „tak, jak powinno”.
ojrask
9

To zależy w dużej mierze od twojego kryterium wyszukiwania.

Jeśli szukasz nazw plików lub wzorców nazw plików, lokalizowanie jest znacznie szybsze, ale nie nadaje się do świeżo wygenerowanych plików, ponieważ używany indeks jest zwykle aktualizowany tylko raz dziennie. Ale jeśli możesz go użyć, jest super szybki.

Ale za pomocą funkcji Znajdź można wyszukiwać rozmiar pliku, wiek pliku i inne rzeczy, których nie można przeszukiwać według lokalizacji.

Jeśli wiesz, gdzie szukać, możesz użyć ścieżki do ograniczenia zakresu wyszukiwania:

find /some/path -size -10M -size +2M -mtime -365 ...

przeszukiwałby tylko pliki od 2 do 10 M, maksymalnie 1 rok w / some / path.

Programy dostępne na ścieżce można przeszukiwać według, plików pomocy, lib i plików konfiguracyjnych z whereis. Przykłady:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz
nieznany użytkownik
źródło
7

Posługiwać się locate

Powodem jest to, że locatekorzysta z bazy danych wszystkich istniejących katalogów i plików, która została już zbudowana tak, jak sobie wyobrażałeś!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

Po ustalonym (i zmiennym) odstępie czasu uruchamiane zadanie skanuje system plików, a następnie tworzy z nim bazę danych. To właśnie ta baza danych (znajduje sięb) z odpowiednimi indeksami locateprzeciwdziała poleceniu zamiast skanować w tym momencie dysk twardy.

Plusem jest to, że jest bardzo szybki w porównaniu ze skanowaniem dysku twardego. Minusem jest to, że zlokalizowana baza danych (umiejscowionab) nie jest „aktywna”, więc można jej używać tylko do plików, które istniały „od” ostatniego skanowania.

Aby zaktualizować umiejscowionyb teraz uruchom updatedb(lub w sudo updatedbrazie potrzeby)

btw Właśnie uruchomiłem sudo updatedblokalnie i zajęło 3 1/2 sekundy! Mam 31 000 plików.

Michael Durrant
źródło
1

Jak zauważyli inni, lokalizowanie może być lepszym narzędziem dla prostszego wyszukiwania.

Jednak w przypadku bardziej skomplikowanych wyszukiwań prawdopodobnie utknąłeś w wyszukiwaniu.

Jednym ze sposobów przyspieszenia wyszukiwania jest zawężenie katalogu, w którym znajdują się twoje pliki, zamiast przeszukiwania całego katalogu głównego.

bigdaveyl
źródło
0

dla pojedynczej operacji wyszukiwania; Nie znalazłem żadnego przyspieszenia; chyba że spróbujesz zawęzić wyszukiwanie za pomocą findopcji.

Jednak; jeśli chcesz wykonać wiele findoperacji na tym samym zestawie plików ; Mam znaczne przyspieszenie zapełniania pliku tymczasowego wszystkimi nazwami plików i używania grep. Oczywiście nie uwzględnia to plików dodawanych lub usuwanych.

Chris Maes
źródło