Skip to content

Ein kleines Lernprojekt, um etwas Erfahrung mit Rust zu sammeln.

License

Notifications You must be signed in to change notification settings

Rextorne/rusty-search

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rusty-Search

Build Status Rust Version License

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.

Features

  • 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.
  • Robust: Überspringt automatisch Binärdateien (via UTF-8 Check) und versteckte Systemdateien.
  • Case Insensitive: Unterstützt Groß-/Kleinschreibung ignorieren (-i).

Bekannte Einschränkungen

  • Regex-Pattern: In der aktuellen Version v1.1.1 fü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.

Installation

Option 1: Release Binary herunterladen (Empfohlen für Nutzer)

Wenn du kein Rust installiert hast, kannst du einfach die fertige Programmdatei nutzen:

  1. Öffne die Releases-Seite dieses Repositories.
  2. Lade die passende Datei für dein System herunter (Linux, macOS oder Windows).
  3. 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/
  4. Windows: Platziere die .exe Datei in einem Ordner deiner Wahl und füge diesen den Umgebungsvariablen (PATH) hinzu, oder nutze sie direkt.

Option 2: Aus dem Source Code bauen (Für Entwickler)

Voraussetzung: Eine installierte Rust-Umgebung (Cargo).

  1. Repository klonen:

    git clone [https://github.com/DEIN_USERNAME/rusty-search.git](https://github.com/DEIN_USERNAME/rusty-search.git)
    cd rusty-search
  2. Release Build erstellen:

    cargo build --release
  3. Installieren (Global verfügbar machen):

    cargo install --path .

Benutzung

Nach der Installation kannst du das Tool mit rusty-search (oder dem Namen deines Binaries) aufrufen.

Syntax

rusty-search [OPTIONS] <PATTERN> <PATH>

Beispiele

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" .

Technologie-Stack

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.

Algorithmen Details

Regex-Modus (Standard)

Aktuell implementiert als Substring-Suche (String::contains). Dies ist extrem schnell für einfache Wortsuchen, unterstützt aber noch keine Wildcards.

Boyer-Moore (Custom Implementation)

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).

Contributing

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.

Lizenz

Dieses Projekt ist unter der BSD-3-Clause Lizenz veröffentlicht.

About

Ein kleines Lernprojekt, um etwas Erfahrung mit Rust zu sammeln.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages