Ich suche nach Open Source-Befehlszeilentools oder Tools, mit denen ich eine große Anzahl von Nur-Text-Dateien indizieren und durchsuchen kann. Eine ungefähre Suche wäre ein Plus. Das Tool muss nur die übereinstimmenden Dateien drucken, obwohl ein Übereinstimmungskontext hilfreich wäre. Ein GUI-Tool ist für meine Anwendung nicht nützlich und auch nichts, das Dateien einzeln durchsucht (z. B. grep). Ich ziele im Grunde auf Unix-Plattformen (OSX, Linux, BSD).
BEARBEITEN: Ich interessiere mich nicht für ein Tool, das systemweit ist oder im Hintergrund ausgeführt werden muss. Grundsätzlich möchte ich einen Index für einen Verzeichnisbaum voller Textdateien erstellen und später danach suchen können. Der Index besteht vorzugsweise aus einer oder mehreren Dateien, deren Speicherort ich angeben kann.
Irgendwelche Ideen?
quelle
grep -r searchterm /somedir/* > index.txt
Antworten:
Wenn Sie nach Dateien anhand des Dateinamens suchen möchten :
Das Standard-Unix-Tool hierfür ist Suchen . Es erstellt eine Datenbank mit Dateien in einem Cron-Job und
locate
durchsucht dann die Übereinstimmungen.Es ist Teil der meisten Linux-Distributionen (normalerweise Paket "locate" oder "mlocate").
Wenn Sie nach Dateien nach Inhalten suchen möchten :
Es gibt eine Vielzahl von Suchmaschinen, die Dokumente für Sie indizieren (einige unterstützen sogar andere Formate als Nur-Text, z. B. Textverarbeitungsdokumente). Beispiele wären Beagle und Google Desktop Search . Es gibt eine ziemlich vollständige Liste auf Wikipedia:
http://en.wikipedia.org/wiki/List_of_search_engines#Desktop_search_engines
Bearbeiten:
Wenn Sie keine Suchmaschine möchten, die im Hintergrund ausgeführt wird oder automatisch alle Ihre Dateien indiziert, können Sie wahrscheinlich weiterhin eine Desktop-Suchmaschine verwenden. Mit den meisten von ihnen können Sie den Indizierungsprozess steuern, sodass Sie die Indizierung manuell starten und angeben können, welche Verzeichnisse indiziert werden sollen und wo die Indexdatei abgelegt werden soll.
quelle
Das Beste, was Sie tun können, ist, die Textdateien in eine MySQL-Datenbank einzuspeisen und das FullText-Matching-System zu verwenden. Dies führt zu sehr schnellen Suchvorgängen mit Rangfolgen, wie gut die Ergebnisse mit der Suche übereinstimmen.
Die Anbindung einer MySQL-Datenbank an andere Systeme, z. B. eine Website für die Dokumentensuche usw., wäre recht einfach.
Nützliche Ressourcen:
quelle
Früher habe ich swish-e verwendet , aber das war vor ungefähr einem Jahrzehnt. Die Entwicklung scheint seitdem ins Stocken geraten zu sein (manchmal bedeutet Stillstand „stabil“, nicht „tot“), aber es könnte für Sie funktionieren.
quelle
Ich habe gefunden, wonach ich gesucht habe. Swish ++ kann ein Verzeichnis von Dateien (nicht nur Text) indizieren und ist im Grunde eine Reihe von Befehlszeilentools. Es scheint eine Neufassung von Swish-e zu sein .
quelle
Wenn ein bisschen Python-Scripting für Sie in Ordnung ist, schauen Sie sich whoosh an: https://bitbucket.org/mchaput/whoosh/wiki/Home
Und ähm, ich denke du hast grep angeschaut. Wenn Ihre Dateibasis klein genug ist, um in den RAM (Puffer-Cache) zu passen, ist dies tatsächlich ziemlich schnell. Hängt natürlich davon ab, wie komplex Ihre Abfragen sind.
quelle