Schneller suchen mit locate

In diesem Artikel über find habe ich bereits eine Art zu suchen vorgestellt, allerdings dauert das Verfahren über find sehr lange.

Die Lösung für dieses Problem:
locate

„locate“ verwendet eine Datenbank in der es alle auf dem System befindlichen Daten speichert, so muss es nur diese Datenbank durch rattern und sich nicht immer durch die gesamte Verzeichnisstruktur hangeln, wie find.

Vorteile sind wie gesagt der Speed!

Ein großer Nachteil ist jedoch das Problem, dass Sie die Datenbank aktuell halten müssen, wenn Sie dies nicht tun ist das Abbild ihrer Daten auf dem System veraltet und Sie finden keine in naher Vergangenheit gespeicherten Daten. Es empfiehlt sich also die Datenbank mal zu aktualisieren, das funktioniert mit updatedb:

updatedb &
Achtung Sie müssen root sein!

Das & bewirkt, dass der Prozess im Hintergrund abläuft. Das ist sinnvoll, weil so ein update schon ein bisschen dauern kann.

Weitere Nachteile sind, dass locate nicht so viele Optionen erlaubt, um genau zu sein erlaubt es nur RegEx (Reguläre Ausdrücke) um die richtige Datei zu finden (Das ist jetzt auf die Filterung bezogen Sachen wie z.B. -size etc).

Beispiele:

Dieser Befehl sucht nur das Wort „test“ egal ob es im Pfad oder im Dateinamen selbst vorkommt:
locate test

Dieser Befehl sucht hingegen wirklich die Datei, da er nur im „basename“ (Es ist quasi der Dateiname gemeint) sucht:
locate -b test

Wenn wir jetzt nur Ergebnisse aus bestimmten Ordnern haben wollen, kann uns das locate nicht bieten, wir können aber zu „sed“ greifen:
locate -b test | sed -n -e '/\/python-support\//p'

Eine kleine Erklärung zu dem Befehl: Wir suchen über locate wieder nur im Dateinamen, und geben den Output von locate -b test an sed über die Pipe (|) weiter. sed übernimmt den Output und filtert ihn mit einem RegEx, ich werde das genaue Vorgehen von sed hier nicht erläutern, aber keine Angst ich liefere bald einen Artikel zu sed nach. Den Link finden Sie dann hier.

Und Fertig er liefert uns nur die Ergebnisse die im Ordner „python-support“ sind.
Hier noch mal die allgemeine Syntax:
locate -b [Suchwort] | sed -n -e '/\/[Ordnername]\//p'

Eine Möglichkeit nach Erstellungszeitraum etc. zu suchen habe ich leider nicht entdecken können, da müssen wir wohl auf find zurück greifen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.