So finden Sie eine Datei in FreeBSD

14

Ich versuche, alle Kopien von example.filenameauf meinem FreeBSD-Server zu finden. Was ist der beste / einfachste / effizienteste Weg, dies zu tun?

Ian
quelle
1
Während die Antworten ähnlich sind, möchten Sie vielleicht klären, ob Sie Linux oder FreeBSD verwenden. Sie sind nicht dasselbe.
Greg Hewgill
bearbeiteter Titel, um das Betriebssystem spezifischer zu machen
Ian
Dies sollte wahrscheinlich mit FreeBSD markiert sein, aber mir fehlt der Ruf, dies zu tun.
mikl

Antworten:

18
find / -name example.filename
Cletus
quelle
2
Zuverlässig, aber langsam. Manchmal sehr langsam
dmckee
3
andere 'find'-Flags, die je nach Bedarf angebracht sein können: -type f (kümmert sich nicht um Verzeichnisse oder Symlinks mit demselben Namen) -ls (um Details wie die Größe der Datei anzuzeigen, z. B. wenn Dateien dieselben haben Name, aber andere Inhalte)
Zac Thompson
19
locate filename

Viel schneller als find, wenn Sie den updatedbSuchdienst ausführen und nur Dateien finden, die zum Zeitpunkt der letzten Ausführung vorhanden waren (normalerweise in der Nacht zuvor unter der Kontrolle eines Cron-Jobs).

Sie könnenupdatedb von Hand laufen , aber das ist noch langsamer als der findCletus vorschlägt und erfordert root. Manchmal aktualisiere ich die Datenbank von Hand, nachdem ich ein paar neue Sachen installiert habe.

dmckee
quelle
3
Locate funktioniert nur, wenn der Dienst zum Erstellen der locate-Datenbank ausgeführt wird (vergessen Sie, wie sie heißt). Es kann auch zu Verzögerungen kommen (da die gesuchte Datei möglicherweise seit dem letzten Build hinzugefügt wurde).
Cletus
Bearbeitungen und Kommentare auf dem Draht gekreuzt. Cool. In beiden Punkten haben Sie natürlich Recht.
dmckee
4
Wenn Sie find /mehr als einmal in der Woche einen großen Baum locatebearbeiten, lohnt es sich wahrscheinlich, den Dienst auszuführen, da er locate(1)so viel schneller ist.
Drew Stephens
@cletus Running sudo periodic weeklyaktualisiert die locateDatenbank. Führen Sie das nach jeder Installation oder jedem Download aus, die die gewünschten Dateien enthalten.
Basil Bourque
2

Wenn Sie locate (aka slocate) installiert haben, dann

locate example.filename

locate führt jede Nacht einen Cron-Job aus, der alle Dateien auf Ihrem Computer neu indiziert. Aus diesem Grund ist es nicht immer auf dem neuesten Stand.

Paul Tomblin
quelle
2

Manchmal möchten Sie Dateien auf einer bestimmten Verzeichnisebene finden. In diesem Fall kann es praktisch sein, Shell-Platzhalter zu verwenden:

ls /data/*/example.filename

Dies funktioniert natürlich nur, wenn Sie eine starre Verzeichnisstruktur haben.

Jon Ericson
quelle
1

locate

Wie bereits erwähnt, locateist dies der schnelle Weg, um eine Datei zu finden. Dieser Befehl verwendet einen vorkompilierten Index der Datei- und Ordnernamen. Diese Datenbank mit Namen wird durchsucht, anstatt durch Ihr Dateisystem zu crawlen.

locate example.filename 

Um zwischen Groß- und Kleinschreibung zu unterscheiden, fügen Sie hinzu -i.

locate -i eXAmPle.FileName

locateDatenbank aktualisieren

Die von verwendete Datenbank locatemuss auf dem neuesten Stand sein. Nach einer Installation oder einem Download, der möglicherweise die gewünschte Datei enthält, müssen Sie die locateDatenbank aktualisieren .

Die locateDatenbank wird irgendwann automatisch von Ihrem FreeBSD-System aktualisiert. Es gibt eine wöchentliche Reihe von Aufgaben, die diese Aufgabe umfasst. Diese Aufgaben werden im /etc/periodic/weekly/310.locateSkript aufgelistet .

Die einfachste und sicherste Möglichkeit, eine frühzeitige Aktualisierung der locateDatenbank zu erzwingen, besteht darin, die wöchentlichen Aufgaben sofort auszuführen.

sudo periodic weekly

Oder Sie könnten sogar alle regulären Aufgaben erzwingen. Möglicherweise möchten Sie dies sofort nach dem Einrichten eines neuen FreeBSD-Systems tun.

sudo periodic daily weekly monthly

Wenn locateSie die Datenbank auf andere Weise aktualisieren , erhalten Sie möglicherweise eine Meldung, dass Sie unsicher sind und die Namen aller Dateien Ihres Systems jedem Benutzer auf dem FreeBSD-System mitteilen. Die Verwendung der periodicRoute vermeidet dieses Problem.

Basil Bourque
quelle
0

Wenn Sie die Datenbank lokalisieren aktuell haben, dann nur:

locate example.filename
Sophie Alpert
quelle
0

Mache ich manchmal


  find . | grep example.filename

wahrscheinlich jedoch enorm ineffizient.

kgrad
quelle
Ja, das passt zu allem und wirft dann alles weg, bis auf den einen Namen, den Sie gesucht haben. Stattdessen können Sie einfach 'find -name "example.filename"' ausführen, was genau dasselbe bewirkt, ohne zuerst alles zu drucken und ohne einen zusätzlichen grep-Prozess auszuführen.
Mihai Limbăşan