Jak korzystać z polecenia locate w określonym katalogu?

16

Korzystam z locatepolecenia w systemie Linux. Moje obecne użycie przeszukuje cały system plików. Chcę tylko, aby wyszukiwała w określonym katalogu. W jaki sposób mogę to zrobić?

telnet
źródło
TLDR: Oto alias terminala, aby locatewyszukać w określonym katalogu: alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " Gdy alias zacznie obowiązywać, wpisz typ terminala my_locate *foo*i ruszaj na wyścigi. Możesz łączyć aktualizacje bazy danych i lokalizować wyszukiwanie, używając znaku dwukropka do konkatowania baz danych. rtfm: linux.die.net/man/8/updatedb
Eric Leschinski

Odpowiedzi:

11

Innym podejściem byłoby użycie dopasowania wzorca w locate:

locate '/some/directory/*filename*'

Porównaj dane wyjściowe poniższych poleceń:

$ locate tmpfile
/usr/lib64/perl5/auto/POSIX/tmpfile.al
/usr/share/man/fr/man3/tmpfile.3.gz
/usr/share/man/ja/man3/tmpfile.3.gz
/usr/share/man/man3/tmpfile.3.gz
/usr/share/man/man3p/tmpfile.3p.gz
$
$ locate '/usr/lib64/*tmpfile*'
/usr/lib64/perl5/auto/POSIX/tmpfile.al
$ 

locate /usr/lib*tmpfile* daje ten sam wynik.

Paweł Brodacki
źródło
3
+1 To jest poprawna odpowiedź. Pamiętaj, że jeśli dodasz symbol wieloznaczny, granice zostaną ustalone. To jest w powyższym przykładzie, $ locate '/usr/lib64/*tmpfile'nie zwróci żadnych wyników.
xofer
Jeśli chcesz mieć większą kontrolę niż proste symbole wieloznaczne może zaoferować, można zawsze rur wyniki locatethrough grep.
Ladadadada,
5

Utwórz bazę danych slocate dla określonego katalogu za pomocą:

updatedb -U /path/to/directory

i szukaj za pomocą:

locate <search_string>

AKTUALIZACJA

Działa to dobrze na moim systemie Gentoo, ale CentOS nie zawiera -Uopcji. Możesz więc spróbować poniżej:

Zbuduj bazę danych za pomocą:

# updatedb -U /path/to/dir -o dir_locate.db

i szukaj:

# locate -d dir_locate.db <search_string>
kwanty
źródło
3
„locate -U” generuje błąd nieprawidłowej opcji… Zgadujesz, że miałeś na myśli „updatedb -U”? Warto również zauważyć, że wymaga to przebudowania mlocate.db (zaktualizowanob), jeśli kiedykolwiek chcesz przeszukać inny katalog.
gharper,
Och, na moim Gentoo działa dobrze, ale CentOS nie zawiera tej opcji.
kwanty
Głosujesz w dół? Czy mógłbyś zostawić komentarz?
kwanty
Jeśli masz błąd typu: updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permittedsprawdź, jak używać komendy updatedb jako zwykły użytkownik w systemie Linux .
kenorb
2

Najprostsza odpowiedź, jaką mogę wymyślić, to

locate search_term | grep "/specified/directory"

Lepszym rozwiązaniem może być użycie opcji „znajdź” i jej opcji ścieżki ...

gharper
źródło
0

Najprostszym sposobem jest jak w poniższym przykładzie:

updatedb -o ~/tmp.db -l0 -U $PWD
locate   -d ~/tmp.db "foo"

Przejdź $PWDdo określonego katalogu.

Powyższy przykład utworzy lokalną bazę danych tylko dla określonego katalogu.

kenorb
źródło