Wie verwende ich den Befehl locate in einem angegebenen Verzeichnis?

16

Ich benutze den locateBefehl unter Linux. Meine derzeitige Verwendung durchsucht das gesamte Dateisystem. Ich möchte nur in einem bestimmten Verzeichnis suchen. Wie kann ich das machen?

Telnet
quelle
TLDR: Hier ist ein Terminal-Alias, mit dem Sie locatein einem bestimmten Verzeichnis suchen können: alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " Sobald der Alias ​​wirksam ist, geben Sie den Terminaltyp ein my_locate *foo*und Sie können loslegen. Sie können Datenbankaktualisierungen verketten und nach Suchen suchen, indem Sie den Doppelpunkt zum Verketten von Datenbanken verwenden. rtfm: linux.die.net/man/8/updatedb
Eric Leschinski

Antworten:

11

Ein anderer Ansatz wäre die Verwendung des Mustervergleichs in locate:

locate '/some/directory/*filename*'

Vergleichen Sie die Ausgabe der folgenden Befehle:

$ 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* gibt das gleiche Ergebnis.

Paweł Brodacki
quelle
3
+1 Dies ist die richtige Antwort. Beachten Sie, dass durch das Einfügen des Platzhalters die Grenzen festgelegt werden. Das heißt, im obigen Beispiel $ locate '/usr/lib64/*tmpfile'werden keine Ergebnisse zurückgegeben.
Xofer
Wenn Sie mehr Kontrolle wünschen, als einfache Platzhalter bieten können, können Sie die Ergebnisse von locatethrough immer weiterleiten grep.
Ladadadada
5

Erstellen Sie eine Slocate-Datenbank für Ihr spezifisches Verzeichnis mit:

updatedb -U /path/to/directory

und suche mit:

locate <search_string>

AKTUALISIEREN

Dies funktioniert gut auf meinem Gentoo-System, aber CentOS enthält keine -UOption. Sie können es also stattdessen unten versuchen:

Erstellen Sie die Datenbank mit:

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

und suche:

# locate -d dir_locate.db <search_string>
Quanten
quelle
3
"locate -U" gibt einen ungültigen Optionsfehler aus ... Sie meinen wohl "updatedb -U"? Gut zu wissen, dass dies eine Neuerstellung von mlocate.db (updatedb) erfordert, wenn Sie jemals ein anderes Verzeichnis durchsuchen möchten.
gharper
Oh, auf meinem Gentoo funktioniert es gut, aber CentOS enthält diese Option nicht.
Quanten
Stimmen Sie ab? Könnten Sie bitte einen Kommentar hinterlassen?
Quanten
Wenn Sie Fehler wie: haben updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permitted, überprüfen Sie, wie Sie den Befehl updatedb als gewöhnlicher Benutzer unter Linux verwenden können .
Kenorb
2

Die einfachste Antwort, die ich mir vorstellen kann, ist

locate search_term | grep "/specified/directory"

Die bessere Lösung könnte darin bestehen, "find" und seine Pfadoptionen zu verwenden ...

gharper
quelle
0

Der einfachste Weg ist wie im folgenden Beispiel:

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

Wechseln Sie $PWDin Ihr spezielles Verzeichnis.

Im obigen Beispiel wird Ihre lokale Datenbank nur für das bestimmte Verzeichnis erstellt.

Kenorb
quelle