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ć?


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.


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>

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 ...


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.