Eine schnellere Suche nach Dateien als das Grepping?

934
ccpizza

Gibt es eine Möglichkeit, eine Datei oder einen Dateibaum von der Konsole aus zu indizieren, so dass die Suche nach Teilzeichenfolgen schneller durchgeführt werden kann als durch einfaches Grepping?

Ich brauche nicht notwendigerweise Unterstützung für reguläre Ausdrücke, obwohl die Unempfindlichkeit gegen Fälle gut wäre.

Ich suche nach einem einfachen Konsolendienstprogramm, das ähnlich funktionieren würde, locate/slocate/mlocateaber statt Dateinamen Dateiinhalte mit bestimmten MIME-Typen an einem konfigurierbaren Ort indizieren würde.

Bisher ist die einzige Lösung, die ich als schneller als grep gefunden habe, fgrepauf ANSI und nicht auf UTF-8 (von https://stackoverflow.com/a/13913220/191246 ) beschränkt - während sie eine beeindruckende Beschleunigung bietet. es ist immer noch zu langsam für große Dateien. Ich würde gerne wissen, ob es einen "billigen" Weg gibt, einen Index zu erstellen und dagegen zu suchen.

Ich denke, whoosh als Option, aber das würde zusätzliche Codierung erfordern.

Ich interessiere mich nicht für Indizierungs-Apps auf Systemebene wie Spotlight auf Mac oder deren Linux-Pendants, da ich auf Datei- oder Unterordnerebene nach etwas Granularem suche.

2
Versuchen Sie [Beagle] (https://faculty.washington.edu/browning/beagle/beagle.html) Ipor Sircer vor 6 Jahren 0

2 Antworten auf die Frage

2
ccpizza

Die Befehlszeilen-Dienstprogramme von Google (in Go geschrieben) passen in den beschriebenen Anwendungsfall.

Auf debian / ubuntu kann es mit installiert werden

sudo apt install codesearch 

Aus Quelle kompilieren:

Falls noch nicht vorhanden, installieren Sie zuerst die Golang- Umgebung und definieren Sie die GOPATHVariable:

sudo mkdir -p /usr/local/go sudo chown myusername /usr/local/go  ## normally you'd put this in your ~/.bashrc export GOPATH=/usr/local/go  ## on ubuntu/debian: sudo apt install golang  ## on osx brew install golang 

Als nächstes bauen cindexund csearch:

go get github.com/google/codesearch/cmd/... 

Nach der Installation von Source haben Sie cindexund csearchunter Ihrem $GOPATH/bin- entweder verschieben Sie sie an einen Ort unter Ihrem $PATH, oder fügen $GOPATH/binSie $PATHIhrem Shell hinzu und aktualisieren Sie Ihre Shell.

Verwendungszweck

Indizieren Sie eine Datei oder einen Ordner:
cindex myproject_dir 

Der Index wird in erstellt ~/.csearchindex.

Jetzt können Sie den Index durchsuchen:

csearch sausage-and-spam 
1
glallen

Andere Alternativen, für die kein Index erforderlich ist, sind:

ripgrep https://blog.burntsushi.net/ripgrep/

agalias der Silbersucher: https://geoff.greer.fm/ag/

ack https://beyondgrep.com/

Eine Non-Regex-Suche in einer 9-GB-Datei dauerte weniger als 10 Sekunden (mit `ripgrep`) - ein erstaunliches Ergebnis für die nicht indizierte Suche! grep dauert Minuten .. ccpizza vor 6 Jahren 0