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?


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.


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>

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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.