Es gibt die Befehle find
und locate
zum Suchen nach Dateien auf der Festplatte.
Ich weiß, dass find
rekursiv alle benötigten Unterverzeichnisse verarbeitet, um Dateien zu durchsuchen, und daher langsam, aber aktuell ist. Dabei locate
wird eine Datenbank verwendet, die von Zeit zu Zeit aktualisiert wird (wann genau?), Um schnell Ergebnisse anzuzeigen, die möglicherweise veraltet sind.
Gibt es noch andere Unterschiede? In welchen Situationen würde man die eine oder andere vorziehen? Und wann wird die locate
Datenbank normalerweise aktualisiert?
anacron
ist es da. Ich weiß nicht, ob es standardmäßig auf Desktop-Systemen / Servern installiert ist, aber auf Notebooks. Es wird beim Booten ausgeführt und überprüft, ob Cron-Jobs ausgeführt werden sollten, während das System ausgeschaltet war, und führt sie aus. Dies ist sehr hilfreich, kann jedoch zu Problemen führen, wenn Aufträge weit entfernt von Mitternacht geplant sind. Das kann dazu führen, dass der Job beim Booten ausgeführt wird und dann wieder, wenn die Zeit abgelaufen ist - möglicherweise weniger als 24 Stunden später (für einen täglichen Job).Antworten:
locate
ist wirklich nur gut zum Finden und Anzeigen von Dateien für Menschen. Sie können ein paar Dinge damit tun, aber ich würde es nicht genug vertrauen, um es zu analysieren, und - wie Sie sagen - es ist unmöglich, den Status der internen Datenbank zu garantieren, umso mehr, als es nur/etc/cron.daily/mlocate
einmal am Tag ausgeführt werden soll!find
ist live. Es filtert, schließt aus, führt aus. Es ist zum Parsen geeignet. Es können relative Pfade ausgegeben werden. Es können vollständige Pfade ausgegeben werden. Es kann Dinge tun, die auf Attributen basieren, nicht nur auf Namen.locate
hat sicherlich einen Platz in meiner Werkzeugkiste, aber es ist normalerweise ganz unten, als letzter Versuch, etwas zu finden. Es ist einfacher alsfind
auch.quelle
locate
es viel schneller, wenn ich mein gesamtes Dateisystem durchsuchen möchte. Sie können die Datenbank auch manuell aktualisieren,updatedb
bevor Sie sie verwenden.sudo updatedb
)? Und gibt es eine Chance zu sehen, wie alt die Datenbank ist?grep run-parts /etc/crontab
Sie werden feststellen, dass diese Systeme verwaltet werdenanacron
(wasman anacron
für Systeme, die nicht ständig in Betrieb sind, ausfallsicherer ist). Soweit ich sehen kann, sollte es beim Booten ausgeführt werden, wenn Sie die ursprüngliche Cron-Zeit verpassen.-exec command {} \;
einen Befehl für jede gefundene Datei ausführen. Ich verwende gernelocate -b
die Einschränkung locate, um Dateien zu finden, die mit der letzten Komponente des Namens übereinstimmen - ohne den Rest des Pfads. Ich versuche das oft zuerst, weil es so schnell ist. Sie könnensudo updatedb
die Lokalisierungsdatenbank jederzeit aktualisieren.ls -R | grep 'file_name.txt'
So sehr ich Oli mag (was sehr viel ist!), Stimme ich ihm auf
find
Befehl nicht zu. Es gefällt mir nichtfind
Befehl dauert mehr als drei MinutenNehmen Sie zum Beispiel diesen einfachen Befehl:
Es dauert mehr als 3 Minuten für
find
von allem Ausgang zu suchen/
. Standardmäßig werden unzählige Fehlermeldungen angezeigt, die Sie durchsuchen müssen, um das Gesuchte zu finden. Trotzdem ist es besser, alsgrep
das gesamte Laufwerk nach einem String zu durchsuchen, was 53 Stunden dauert : Es dauert lange, alle Dateien nach einem String zu durchsuchenIch weiß, dass ich mit den Parametern des Befehls find experimentieren kann, damit es besser funktioniert, aber der springende Punkt ist die Zeit, die für die Ausführung benötigt wird.
locate
Befehl dauert weniger als eine SekundeNun verwenden wir
locate
:Der Befehl locate dauert weniger als eine Sekunde!
updatedb
Standardmäßig nur einmal am Tag ausführenEs ist wahr, dass der
updatedb
Befehl, der die Suchdatenbank aktualisiert , standardmäßig nur einmal am Tag ausgeführt wird. Sie können es manuell ausführen, bevor Sie nach Dateien suchen, die Sie gerade hinzugefügt haben. Verwenden Sie dazu:Obwohl dies 3 Sekunden dauert, ist es im Vergleich zu
find
den über 3 Minuten des Befehls klein .Ich habe mein aktualisiert
sudo crontab -e
, um die Zeile am unteren Rand einzuschließen:Jetzt wird alle fünf Minuten
updatedb
ausgeführt und dielocate
Befehlsdatenbank ist fast immer auf dem neuesten Stand.Aber es gibt keine Attribute?
Sie können die
locate
Ausgabe an andere Befehle weiterleiten. Wenn Sie beispielsweise die Dateiattribute verwenden möchten, können Sie Folgendes verwenden:Zusammenfassung
Ich gab diese Antwort bekannt, um die Geschwindigkeit und die Benutzerfreundlichkeit von zu zeigen
locate
. Ich habe versucht, einige der von anderen angesprochenen Mängel des Befehls zu beheben.Der
find
Befehl muss die gesamte Verzeichnisstruktur durchlaufen, um Dateien zu finden. Derlocate
Befehl verfügt über eine eigene Datenbank, die ihm im Vergleich eine blitzschnelle Geschwindigkeit verleiht.quelle
locate / display-auto-brightness
dauert 17 Sekunden und zeigt außerdem jedes Verzeichnis und jede Datei auf allen Festplatten an.--regex
war notwendig, weil mit meinem Suchbegriff zu viele Ergebnisse zurückgegeben wurden. Ich werde in wenigen Minuten zwei neue Beispiele finden, um meine Antwort zu finden und zu finden und zu aktualisieren.find
bedeutet dieser Befehl "Drucken Sie die Dateinamen aller Dateien in den Verzeichnissen/
unddisplay-auto-brightness
". Ich denke, Sie wollten verwendenfind / -name display-auto-brightness
, aber selbst das gibt eine Menge Junk-Fehler "Erlaubnis verweigert" aus.