Rusty-Search ist ein hochperformantes, multithreaded Kommandozeilen-Tool (CLI) zum Durchsuchen von Dateien, geschrieben in Rust. Es wurde entwickelt, um die Performance von Rust zu demonstrieren und klassische Suchalgorithmen (Boyer-Moore) manuell zu implementieren.
Es ist eine moderne Alternative zu grep mit Fokus auf Geschwindigkeit und User Experience.
- Multithreading: Nutzt
rayon, um Dateien parallel auf allen CPU-Kernen zu durchsuchen. - Algorithmen-Wahl:
- Standard (Regex-Mode): Schnelle Suche nach exakten Teilstrings (String Matching).
- Boyer-Moore: Eigene Implementierung der "Bad Character Heuristic" für effiziente Suche.
- User Experience:
- Integrierter Ladebalken (
indicatif) für Fortschrittsanzeige bei großen Verzeichnissen. - Farbige Ausgabe (
colored) für bessere Lesbarkeit.
- Integrierter Ladebalken (
- Robust: Überspringt automatisch Binärdateien (via UTF-8 Check) und versteckte Systemdateien.
- Case Insensitive: Unterstützt Groß-/Kleinschreibung ignorieren (
-i).
- Regex-Pattern: In der aktuellen Version
v1.1.1führt der Standard-Modus (--algo regex) eine exakte Textsuche durch (contains). Echte reguläre Ausdrücke (wie\d+,^Start,[a-z]) werden momentan als normaler Text behandelt und noch nicht ausgewertet. Die Integration einer vollwertigen Regex-Engine ist für das nächste Update geplant. - Testabdeckung: Die Unit- und Integration-Tests decken derzeit nur die Basisfunktionalität ab und sind noch nicht vollständig.
Wenn du kein Rust installiert hast, kannst du einfach die fertige Programmdatei nutzen:
- Öffne die Releases-Seite dieses Repositories.
- Lade die passende Datei für dein System herunter (Linux, macOS oder Windows).
- Linux/macOS: Mache die Datei ausführbar und verschiebe sie in deinen System-Pfad:
chmod +x rusty-search sudo mv rusty-search /usr/local/bin/
- Windows: Platziere die
.exeDatei in einem Ordner deiner Wahl und füge diesen den Umgebungsvariablen (PATH) hinzu, oder nutze sie direkt.
Voraussetzung: Eine installierte Rust-Umgebung (Cargo).
-
Repository klonen:
git clone [https://github.com/DEIN_USERNAME/rusty-search.git](https://github.com/DEIN_USERNAME/rusty-search.git) cd rusty-search -
Release Build erstellen:
cargo build --release
-
Installieren (Global verfügbar machen):
cargo install --path .
Nach der Installation kannst du das Tool mit rusty-search (oder dem Namen deines Binaries) aufrufen.
rusty-search [OPTIONS] <PATTERN> <PATH>
Einfache Suche: Suche nach "Error" im aktuellen Ordner:
rusty-search "Error" .
Case Insensitive Suche: Findet "error", "ERROR", "Error" etc.:
rusty-search -i "error" ./logs
Boyer-Moore Algorithmus nutzen: Besonders effizient bei sehr langen Suchbegriffen:
rusty-search --algo boyer "Ein_sehr_langes_such_wort" .
Dieses Projekt nutzt folgende Rust-Crates:
- clap: Parsing der Kommandozeilen-Argumente.
- rayon: Daten-Parallelismus (Work-Stealing Iterator).
- walkdir: Rekursives Traversieren des Dateisystems.
- indicatif: Fortschrittsbalken.
- colored: Terminal-Farben.
Aktuell implementiert als Substring-Suche (String::contains). Dies ist extrem schnell für einfache Wortsuchen, unterstützt aber noch keine Wildcards.
Implementiert die Bad Character Rule.
- Erstellt eine Tabelle für das letzte Vorkommen jedes Zeichens im Suchmuster.
- Bei einem Mismatch springt der Algorithmus basierend auf dem Zeichen im Text, das nicht passte.
- Kann theoretisch Sub-Linear laufen (d.h. muss nicht jedes Zeichen des Textes anschauen).
Pull Requests sind willkommen! Bitte stelle sicher, dass alle vorhandenen Tests erfolgreich durchlaufen:
cargo test
Hinweis: Die aktuelle Testabdeckung ist noch unvollständig. Beiträge, die neue Testfälle hinzufügen oder die bestehenden Tests verbessern, werden besonders geschätzt.
Dieses Projekt ist unter der BSD-3-Clause Lizenz veröffentlicht.