Istnieją polecenia find
i locate
do wyszukiwania plików na dysku.
Wiem, że find
rekurencyjnie przetwarza wszystkie potrzebne podkatalogi do wyszukiwania plików i dlatego jest powolny, ale aktualny, podczas gdy locate
korzysta z bazy danych, która jest aktualizowana co jakiś czas (kiedy dokładnie?), Aby szybko wyświetlać wyniki, które mogą być nieaktualne.
Czy są jakieś inne różnice? W jakich sytuacjach jeden wolałby jedno lub drugie? A kiedy locate
baza danych jest zwykle aktualizowana?
anacron
jest. Nie wiem, czy jest domyślnie instalowany na komputerach / serwerach, ale na notebookach. Działa podczas rozruchu i sprawdza, czy jakieś zadania crona powinny były zostać uruchomione, gdy system był wyłączony, i uruchamia je. Jest to bardzo pomocne, ale może powodować pewne problemy, jeśli zadania są zaplanowane z dala od północy. Może to spowodować uruchomienie zadania przy rozruchu, a następnie ponownie, gdy nadejdzie czas - być może znacznie mniej niż 24 godziny później (w przypadku codziennej pracy).Odpowiedzi:
locate
jest naprawdę dobry tylko do wyszukiwania plików i wyświetlania ich ludziom. Możesz zrobić z nim kilka rzeczy, ale nie ufałbym temu na tyle, aby parsować i - jak mówisz - nie można zagwarantować stanu wewnętrznej bazy danych, tym bardziej, że jest uruchamiana tylko/etc/cron.daily/mlocate
raz dziennie!find
jest na żywo. Filtruje, wyklucza, wykonuje. Nadaje się do parsowania. Może generować ścieżki względne. Może generować pełne ścieżki. Może robić rzeczy na podstawie atrybutów, a nie tylko nazw.locate
z pewnością ma miejsce w moim zestawie narzędzi, ale zwykle jest na samym dole jako ostatnia próba znalezienia czegoś. To łatwiejsze niżfind
też.źródło
locate
znacznie szybszy, jeśli chcę przeszukać cały system plików. Możesz ręcznie zaktualizować bazę danych, używając jejupdatedb
przed użyciem.sudo updatedb
)? Czy jest szansa, aby zobaczyć, ile lat ma baza danych?grep run-parts /etc/crontab
Zobaczysz, że są one zarządzane przezanacron
(które zobaczysz,man anacron
jest bardziej odporny na systemy, które nie są włączone przez cały czas). Z tego, co widzę, powinno uruchomić się przy rozruchu, jeśli przegapisz oryginalny czas crona.-exec command {} \;
uruchomienie polecenia na każdym znalezionym pliku. Lubię używać,locate -b
które ogranicza lokalizowanie do wyszukiwania plików pasujących do końcowego komponentu nazwy - bez reszty ścieżki. Często próbuję tego pierwszego, ponieważ jest tak szybki. Ponadto można uruchomić wsudo updatedb
dowolnym momencie, aby odświeżyć zlokalizowaną bazę danych.ls -R | grep 'file_name.txt'
Tak bardzo, jak lubię Oli (co jest dużo!) Nie zgadzam się z nim na
find
polecenie. Nie podoba mi się tofind
polecenie trwa ponad trzy minutyWeźmy na przykład to proste polecenie:
To trwa ponad trzy minuty dla
find
szukać wszystko począwszy od/
. Domyślnie pojawiają się ryzę komunikatów o błędach i musisz je przeszukać, aby znaleźć to, czego szukasz. Nadal jest lepsze niżgrep
przeszukiwanie całego dysku w poszukiwaniu ciągu, który zajmuje 53 godziny : `grep`ing wszystkich plików w ciągu ciągu zajmuje dużo czasuWiem, że mogę manipulować parametrami polecenia find, aby działało to lepiej, ale chodzi tutaj o czas potrzebny do uruchomienia.
locate
polecenie zajmuje mniej niż sekundęTeraz użyjmy
locate
:Polecenie lokalizacji zajmuje mniej niż sekundę!
updatedb
domyślnie uruchamiany tylko raz dzienniePrawdą jest, że
updatedb
polecenie aktualizujące lokalizację bazy danych jest domyślnie uruchamiane tylko raz dziennie. Możesz uruchomić go ręcznie przed wyszukaniem właśnie dodanych plików, używając:Chociaż zajmie to 3 sekundy, jest to małe w porównaniu do
find
3+ minut polecenia.Zaktualizowałem mój,
sudo crontab -e
aby zawierał wiersz u dołu:Teraz co pięć minut
updatedb
jest uruchamiana, alocate
baza danych poleceń jest prawie zawsze aktualna.Ale nie ma atrybutów?
Możesz
locate
przesyłać dane wyjściowe do innych poleceń. Jeśli na przykład chcesz atrybuty pliku, możesz użyć:Podsumowanie
Opublikowałem tę odpowiedź, aby pokazać szybkość i łatwość użycia
locate
. Próbowałem poradzić sobie z niektórymi niedociągnięciami w dowodzeniu wskazanymi przez innych.find
Komenda musi przemierzyć całą strukturę katalogów, aby znaleźć pliki.locate
Komenda ma własną bazę danych, która daje mu błyskawicznie w porównaniu.źródło
locate / display-auto-brightness
zajmuje 17 sekund, a także wyświetla każdy katalog i plik na wszystkich dyskach.--regex
było konieczne, ponieważ z moim ciągiem wyszukiwania zwróciło się zbyt wiele wyników. Znajdę dwa nowe przykłady znajdowania, lokalizowania i aktualizowania mojej odpowiedzi za kilka minut.find
polecenie oznacza „wydrukuj nazwy wszystkich plików w katalogach/
idisplay-auto-brightness
”. Myślę, że chciałeś użyćfind / -name display-auto-brightness
, ale nawet to drukuje wiele niepotrzebnych błędów „Odmowa zezwolenia”.