No description
Find a file
2026-10-30 12:45:06 +01:00
src chore: initial commit 2026-10-30 12:45:06 +01:00
tests chore: initial commit 2026-10-30 12:45:06 +01:00
.gitignore chore: initial commit 2026-10-30 12:45:06 +01:00
Cargo.lock chore: initial commit 2026-10-30 12:45:06 +01:00
Cargo.toml chore: initial commit 2026-10-30 12:45:06 +01:00
README.md chore: initial commit 2026-10-30 12:45:06 +01:00

nc-sortier-check (Rust)

Rust-Port von ~/bin/nc-sortier-check.py. Prüft das Inventar (nc-inventar.py → pfad<TAB>groesse) auf Sortierfehler. Reine Analyse: kein Netz, keine Schreibzugriffe.

Warum

Das Python-Skript läuft über Inventare mit hunderttausenden Zeilen und wendet pro Pfad fünf reguläre Ausdrücke an. Der Rust-Port startet in Millisekunden, braucht den halben Speicher und ist auf 1 Mio. Zeilen rund 6× schneller — bei byte-identischer Ausgabe.

Bauen und installieren

cargo build --release
install -m 755 target/release/nc-sortier-check ~/bin/nc-sortier-check

Benutzen

nc-sortier-check [inventar.tsv]

Ohne Argument gilt derselbe Default wie im Original: /home/pandi/.hermes/cache/scratch/nc-inv-ssd.tsv.

Abschnitte der Ausgabe:

  • Größte Gruppen (Ebene 2), Top 25
  • Lose Dateien direkt in SSD-Share
  • Verdächtige Namen: Kopie/(1), ohne-Datum, Doppel-Endung
  • Gleicher Dateiname in mehreren Ordnern (Top 12)
  • Identische Größe > 2048 Byte als Dublettenverdacht (Top 12)
  • Jahresordner vs. Datum im Dateinamen

Abweichung zum Python-Original

Der Abschnitt „Jahresordner passt nicht zum Dateinamen“ war im Original toter Code: re.search(r"/(\d{4})-\d\d-\d\d", os.path.basename(p)) kann nie treffen, weil os.path.basename() keinen / enthält. Der Rust-Port prüft den Dateinamen ohne führenden Slash und meldet Abweichungen tatsächlich. Alle anderen Abschnitte sind unverändert.

Tests

cargo test
  • 8 Unit-Tests für Gruppierung, Zähl-Reihenfolge, Parser, Schwellwerte und den reparierten Jahresordner-Check.
  • 1 Paritätstest, der das Python-Original und das Rust-Binary auf derselben Fixture laufen lässt und die Ausgaben byte-genau vergleicht.

Messung (2026-10-29)

Inventar mit 1.000.000 Zeilen (47 MB), 3 Läufe je Implementierung:

Rust    0.55–0.56 s   242 MB RSS
Python  3.57–3.62 s   458 MB RSS

Startzeit auf einer 100-Zeilen-Datei (10 Läufe): Rust 3,1 ms, Python 18,5 ms.