Gibt es eine Möglichkeit, die Suchgeschwindigkeit zu erhöhen?

15

Ich frage mich, ob es eine Möglichkeit gibt, die findGeschwindigkeit im Terminal zu erhöhen . Es macht keinen Sinn, dass die Verwendung von Internet-Google für die Suche eine bessere Geschwindigkeit bietet als die lokale Suche nach Zeichenfolgen oder nur nach Dateinamen.

Ich frage mich, ob es eine Möglichkeit gibt, eine lokale Indizierungsbasis zu haben, wenn sie einmal erstellt wurde. In Zukunft könnte der Befehl find superschnell sein.

Oder irgendwelche anderen Vorschläge?

Vielen Dank!

Daniel
quelle
Können Sie Ihren Beitrag mit Ihrem Betriebssystem und / oder Ihrer Distribution bearbeiten?
Jodie C

Antworten:

15

Versuchen Sie es mit locate, es sollte tun, was Sie wollen.

Wojtek Rzepala
quelle
13
Normalerweise ist es eine gute Idee, die Antwort etwas genauer zu formulieren. Zum Beispiel zu erwähnen, von welchem ​​Paket locate(normalerweise slocate) es stammt, und es updatedbfür die Neuerstellung der Datenbank zu verwenden. :-)
Patrick
1
Dies funktioniert nicht für Partitionen mit deaktivierter Indizierung. Beispielsweise leiden NTFS-Partitionen unter einer schlechten Leistung, wenn die Indizierung aktiviert ist.
ojrask
9

Dies hängt stark von Ihrem Suchkriterium ab.

Wenn Sie nach Dateinamen oder Dateinamenmustern suchen, ist die Suche viel schneller, jedoch nicht für frisch generierte Dateien geeignet, da der verwendete Index normalerweise nur einmal pro Tag aktualisiert wird. Aber wenn Sie es verwenden können, ist es super schnell.

Mit find können Sie jedoch nach Dateigröße, Alter und anderen Dingen suchen, die nach locate nicht durchsuchbar sind.

Wenn Sie wissen, wo Sie suchen müssen, können Sie den Suchbereich über den Pfad eingrenzen:

find /some/path -size -10M -size +2M -mtime -365 ...

würde nur Dateien von 2 bis 10 M, maximal 1 Jahr alt, in / some / path suchen.

Programme, die im Pfad vorhanden sind, können mit whereis nach welchen, Hilfe-, Bibliotheks- und Konfigurationsdateien durchsucht werden. Beispiele:

which java
/usr/bin/java

whereis firefox 
firefox: /usr/bin/firefox /etc/firefox /usr/lib/firefox /usr/share/firefox /usr/share/man/man1/firefox.1.gz
Benutzer unbekannt
quelle
7

Verwenden locate

Der Grund dafür ist, dass locateeine Datenbank aller vorhandenen Verzeichnisse und Dateien verwendet wird, die bereits so erstellt wurde, wie Sie es sich vorgestellt haben!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm

In einem festgelegten (und änderbaren) Intervall durchsucht ein Job das Dateisystem und erstellt daraus eine Datenbank. Es ist dann diese Datenbank (locationb) mit ihren entsprechenden Indizes, locategegen die der Befehl verstößt, anstatt an diesem Punkt Ihre Festplatte zu durchsuchen .

Der Vorteil ist, dass es im Vergleich zu einem Festplatten-Scan sehr schnell ist. Der Nachteil ist, dass die Suchdatenbank (locationb) nicht "live" ist und daher nur für Dateien verwendet werden kann, die "ab" dem letzten Scan vorhanden waren.

Führen Sie zum Aktualisieren von "locatedb now" updatedb(oder sudo updatedbfalls erforderlich) aus.

Übrigens lief ich nur vor sudo updatedbOrt und es dauerte 3 1/2 Sekunden! Ich habe 31.000 Dateien.

Michael Durrant
quelle
1

Wie bereits erwähnt, ist locate möglicherweise ein besseres Tool für einfachere Suchanfragen.

Bei komplexeren Suchvorgängen bleiben Sie jedoch wahrscheinlich beim Finden hängen.

Eine Möglichkeit, die Suche zu beschleunigen, besteht darin, das Verzeichnis einzugrenzen, in dem sich Ihre Dateien befinden, anstatt das gesamte Stammverzeichnis zu durchsuchen.

Bigdaveyl
quelle
0

für eine einzelne Suchoperation; Ich habe keine Beschleunigung gefunden. es sei denn, Sie versuchen, die Suche mithilfe von findOptionen einzugrenzen.

Jedoch; Wenn Sie mehrere findVorgänge für dieselbe Gruppe von Dateien ausführen möchten . Ich habe eine signifikante Beschleunigung bekommen, indem ich eine temporäre Datei mit allen Dateinamen befüllt und benutze grep. Dabei werden natürlich keine Dateien berücksichtigt, die hinzugefügt oder gelöscht werden.

Chris Maes
quelle