staging.inyokaproject.org

2026 Woche 38

19. September 2026

Wer auf fryboyter.de aktuell die Suchfunktion verwendet, lädt erst einmal eine JSON-Datei herunter. An sich eine feine Sache, da die Suche somit lokal erfolgt. Allerdings wird diese Index-Datei immer größer. Aktuell über einem Megabyte.

Ich habe mich daher schon vor längerer Zeit überlegt eine andere Lösung zu nutzen. Schlussendlich bin ich bei Pagefind gelandet. Der damit erzeugte Index besteht nicht aus einer großen Datei, sondern aus mehreren kleinen Dateien von denen nur die geladen werden die für die jeweilige Suche benötigt werden. Es spart also Bandbreite für den jeweiligen Nutzer.

Mit Pagefind gab es bei meinen bisherigen Tests allerdings ein Problem. Die Artikelüberschrift wurde zweimal genannt. Einmal als Titel des Suchergebnisses in Form eines Links. Und einmal sozusagen im angezeigten Artikeltest. Also beispielsweise so.

Neuer Betreuer für das Hugo-Theme Ananke gesucht

Betreuer für das Hugo-Theme Ananke gesucht. Blablabla. Veröffentlicht am 16. September 2024 |

Das ist jetzt nicht unbedingt schlimm aber es ist irgendwie nervig. Eine Lösung hatte ich bisher nicht gefunden. Was aber an mir und nicht an Pagefind lag. Im Grunde ist die Lösung ziemlich einfach. Bisher sieht die Datei single.html, mit der die einzelnen Artikel angezeigt werden, wie folgt aus.

{{ define "head" }}
{{ partial "head.html" . }}
{{ end }}
{{ define "main" }}

{{ .Title }}

{{ partial "metadata.html" . }} {{- .Content }} {{- partial "taxonomy.html" . }} {{- partial "related.html" . }}
{{ end }}

Ändert man diese Datei nun folgendermaßen, wird die Überschrift nur einmal angezeigt, so wie es sein soll.

{{ define "head" }}
{{ partial "head.html" . }}
{{ end }}
{{ define "main" }}

="title">{{ .Title }}

{{ partial "metadata.html" . }}
{{- .Content }}
{{- partial "taxonomy.html" . }} {{- partial "related.html" . }}
{{ end }}

Entscheidend ist hierbei in dem Fall hauptsächlich, dass man der Artikelüberschrift data-pagefind-meta=“title” zuweist und erhält dann beispielsweise folgende Anzeige.

Neuer Betreuer für das Hugo-Theme Ananke gesucht

der MIT-Lizenz) für den statischen Website-Generator Hugo. Für dieses Theme wird nun

Einige werden sich nun fragen, warum der Artikeltext im Suchergebnis mit “der MIT-Lizenz)” anfängt. Pagefind zeigt in der Standardkonfiguration die Zeile an, in der der Suchbegriff das erste Mal erscheint. Ich bin mir nicht sicher, ob mir das so gefällt.

Alternativ könnte man auch das anzeigen, was im Tag steht. Was ich für wesentlich besser halte. Nur habe ich diesen Eintrag bisher nie erstellt. Also seit 2009. Das nachzuholen würde einige hundert Artikel betreffen. Worauf ich manuell keine Lust habe. Daher bin ich aktuell dabei eine Lösung zu testen die mir anhand zweier lokaler LLM eine sinnvolle Beschreibung liefert. Welche ich aber selbstverständlich prüfen werde, falls ich diese Lösung nutzen werde. Aber das ist Stoff für einen anderen Artikel. Vielleicht.

18. September 2026

Was lässt sich nach knapp einem halben Jahr über NixOS sagen? Ist es für den "Normalo" zu schwierig? Wie performt es?



Vor einem halben Jahr bin ich zu NixOS gewechselt und nutze es auf allen meinen Rechnern. Zeit für eine ehrliche Zwischenbilanz.

Das Fazit zuerst

Starkoch Nixos kocht noch immer. Die Küche ist aufgeräumt, die Speisekarte als einzige Quelle der Wahrheit ist der Königsweg – und das in drei Restaurants gleichzeitig.

Die beste Erfahrung: NixOS hat mich in den letzten sechs Monaten nie im Stich gelassen, obwohl ich nicht zimperlich mit ihm umgegangen bin. Kein einziger Paketkonflikt, obwohl ich fast alles aus dem Unstable-Branch beziehe – kein zerschossenes System, obwohl ich massiv an der Konfiguration gebastelt habe – der Grundstock ist nach wie vor die Erstinstallation. Ich hatte wirklich immer einen voll arbeitsfähigen Rechner, was mich zwar maximal erfreute, aber es irritierte mich zu Beginn auch irgendwie. Denn nach meiner bisherigen Erfahrung mit Basteln an Linux wäre so stümper- und laienhaftes Schrauben am System unweigerlich mit einem einsam blinkendem Curser auf schwarzem Grund bestraft worden. Mittlerweile ist es mir zur beruhigenden Gewissheit geworden, dass ich immer auch einen Schritt zurück machen kann (1-Klick-Rollback beim Reboot), sollte die neue Konfiguration noch nicht passen.

Ich hatte Probleme, nicht wenige(!), aber diese hatten weniger mit NixOS, als überwiegend mit Git bzw. Codeberg zu tun. NixOS ist ein absolut großartiges Desktop-Linux, aber noch beeindruckender sind die Möglichkeiten, die diese Distribution für eine Multi-Host-Umgebung (also eine Nix-Konfiguration für mehrere Rechner) bietet. Ich hatte die dahingehenden Möglichkeiten von Flakes in Teil 2, Teil 3 und einem weiteren Beitrag in meinem Setup-Guide beschrieben. An Git führt dann aber kein Weg vorbei. Nur ... – Git ist so eine Bit**, es duldet nur die 100%ige und vollständige Unterwerfung vor den Regeln – schlecht, wenn man diese noch nicht so drauf hat. Zum Glück ist NixOS selbst aber extrem robust und stabil, es hat sich durch meine wilde Lernkurverei nie aus der Bahn werfen lassen.

Wenn ich in NixOS mehr verändern möchte, als nur ein Paket zu installieren, schaue ich immer zuerst in die Dokumentation (Wiki und die Options), damit ich den Grundgedanken der Konfiguration in der Nix-Sprache verstehe. Das Suchen in Foren war immer eine Sackgasse. Dagegen lasse ich mir meinen Entwurf für veränderte Konfigurationsdateien (.nix, ich nenne sie liebevoll "Nixen") immer von einer freundlichen KI gegenchecken. Gleiches gilt für die Interpretation von Fehlermeldungen, welche ich oft als Reaktion auf meine Experimente zurückbekam. Diese Fehlermeldungen (generiert vom Nix-Evaluator) sind übrigens bemerkenswert, da sie ziemlich ausführlich, konkret und präzise ausfallen, keineswegs nur eine Fehlernummer mit Benennung. Mit dem beschriebenen Vorgehen bin ich als Novize gut gefahren.

Ich schrieb ja schon ziemlich zu Beginn, also voll in meiner Anfangseuphorie, dass Distro-Hopping durch NixOS ein Ende gefunden hat. Daran hat sich tatsächlich nichts geändert, nach einem halben Jahr mit NixOS gibt es kein Zurück mehr. Die Idee des Deklarativen (siehe Teil 1 meines Setup-Guides) hat sich eingebrannt und begeistert mich bis heute ungebrochen.

Was brillant funktioniert

Das Versprechen der Reproduzierbarkeit. Ich betreibe mittlerweile drei Rechner mit NixOS: einen Dell 5320, einen Dell Pro Plus und ein Surface Go 2 (welches mein altes Lenovo ersetzte). Alle drei laufen mit der gleichen Basis-Konfiguration. Wenn ich auf einem Rechner etwas ändere, landen die Änderungen via Codeberg auf allen anderen – mit einem einzigen Befehl. Das klingt nach einem kleinen Kunststück – aber genau das ist NixOS.

Rollbacks retten Leben. Zweimal bootete ein Rechner nach einem Rebuild (mit von mir verursachten Konfigurationsfehlern) nicht mehr – einmal der Dell 5320 wegen einer falschen UUID in der hardware-configuration.nix, einmal das Surface wegen eines von mir verursachtem Kernel-Konflikts. Beide Male: Neustart – ältere Generation im Bootmenü wählen – fertig. Auf anderen Systemen wäre das eine Neuinstallation geworden. Bei NixOS war es ein Klick. Und das ist schon beeindruckend – und ungemein beruhigend. Der Arbeitstag kann dann in jedem Fall erstmal normal weiter laufen.

Das Update-Skript. Von Beginn an erstellte ich mir kleine Skripte für die Shell (in meinem Fall die Fish-Shell), welche Arbeitsschritte zusammenfassen. Klar, ein Update funktioniert bei NixOS tatsächlich mit nur einem Befehl, aber wenn man wie in meinem Fall Flakes nutzt, muss es ja noch über Git zu Codberg und committet werden. Was als einfaches nixos-rebuild switch begann, ist heute eine vollständige Fish-Funktion namens update, die automatisch erkennt, ob ein Rechner hinter Codeberg zurückliegt oder lokale Änderungen hat – und dann das Richtige tut. Kein Nachdenken mehr darüber, ob ich eine aktualisierte Konfiguration auch wirklich via Git zu Codeberg transferiert hatte.
Konkret funktioniert das so: Mein Skript update vergleicht zunächst den lokalen Git-Stand mit dem auf Codeberg. Hängt der aktuelle Rechner hinter Codeberg zurück – zum Beispiel, weil auf einem anderen Rechner Änderungen gemacht wurden – holt es automatisch den aktuellen Stand und baut das System neu. Hat der aktuelle Rechner hingegen neue lokale Änderungen, aktualisiert es die Paketversionen, baut das System, bereinigt den Nix-Store und sichert alles auf Codeberg. Sind beide Seiten auf dem gleichen Stand, wird trotzdem ein Update der Pakete angestoßen – damit kein Rechner aus Versehen veraltet.
Darunter liegen drei Funktionen, die ich zunächst als separate Skripte hatte: update-push für das bewusste Aktualisieren und Sichern, pull-update für das Holen und Bauen vom Codeberg-Stand, und rebuild für den schnellen lokalen Neuaufbau ohne Git.

Und die Weiterentwicklung in Form des Skripts update steht auch Dir zur Verfügung. Die verlinkten Konfigurationsdateien aus dem Teil 2 meines Setup-Guides habe ich seither aktualisiert.

Multi-Host-Setup. Durch das mehrfach verbesserte und nun finale Update-Skript konnte ich meine selbst- und hausgemachten Git- und Codeberg-Probleme überwinden. Seither ist die Freude an der Multi-Host-Performance von NixOS ungetrübt. Kleines Beispiel: Ich hatte meine Tochter immer um ihr schickes kleines Surface Go 3 beneidet, deshalb kaufte ich mir nach dem Tod meines alten Lenovo (ich berichtete HIER von der Einbindung) ein gebrauchtes Go 2 mit M3-Prozesser. Unter den Ultra-Portablen PCs mit Tablet-Funktion, ist die Surface-Go-Serie in meinen Augen ein herausragend wunderbares Stück Hardware – einen kleinen portablen Rechner brauche ich einfach auch (hauptsächlich für den Urlaub). Trotz einer abgespeckten Programmauswahl und weniger Verknüpfungen mit Netzwerklaufwerken, lässt sich der kleine Rechner dennoch super in die gemeinsame Grundkonfiguration einbinden und auch dort verwalten. Die oben verlinkte Anleitung beschreibt das Vorgehen. Die für das Go 2 angepassten "Nixen" verlinke ich ganz unten.

Performance. Beispielsweise das erwähnte Surface Go 2 (mit dem M3-Prozessor) läuft mit dem Standard-NixOS-Kernel (einen angepassten Surface-Kernel braucht es nicht) unter NixOS um Welten flüssiger, als das leicht bessere Go 3 meiner Tochter mit dem i3 unter Ubuntu.
Generell muss ich sagen, dass NixOS extrem flüssig auf jeder meiner Maschinen läuft. Auf dem Dell5320 hatte ich ja vorher CachyOS, das lief keine Spur besser.

Wo es wirklich gehapert hat

Git und Codeberg waren mein Erzfeind, mein Endgegner, "aarrrrghh". Der SSH-Key für root fehlte. Branches liefen auseinander. Push-Fehler wegen nicht-linearer Historie. Falsche UUIDs in der hardware-configuration.nix die irgendwann beim falschen Rechner gelandet waren. Ich habe mindestens ein Dutzend Mal sudo git reset --hard origin/master eingegeben – manchmal notgedrungen, manchmal weil ich es schlicht vergessen hatte vorher zu pullen. Aus diesen selbst eingebrockten Frust-Momenten entstand das Skript update, welches mich vor eigenen Fehlern im Umgang mit Git schützt.

Die ehrliche Diagnose: Die Git-Workflows bei einem Multi-Host-Setup sind nicht trivial. Man muss verstehen, dass Codeberg die Quelle der Wahrheit ist – und immer dann, wenn man das vergisst, rächt es sich. Ich habe es oft vergessen.

Die flake.nix ist nicht fehlerverzeihend. Ein fehlendes Anführungszeichen, ein falscher Attributname, ein home-manager.users.retorix das für zwei von drei Rechnern vergessen wurde – und das System baut nicht, oder schlimmer, es baut aber lässt danach alle Programme verschwinden. Der Nix-Evaluator gibt aber geduldig so lange erläuternde Fehlermeldungen, bis man den Dreh (evtl. mit KI-Unterstützung) raus hat.

Der fehlerhafte Nextcloud-Client. Ausgerechnet der für mich so wichtige Nextcloud-Client machte als normales Paket Probleme. Das selektive Auswählen von Synchronisationsordnern war im Paket fehlerhaft. Die Internet-Recherche ergab, dass es ein bekanntes Problem ist, die Flatpak-Version aber fehlerfrei sein soll. Somit musste ich in den sauren Apfel beißen (ich mag keine Container) und nur für dieses eine Programm auf meinem System Flathub einrichten. Tatsächlich waren damit dann aber auch die Probleme mit dem Nextcloud-Client gelöst.

Zeitaufwand für ein Update. Das ist nur eine Anmerkung, nichts was einschränkt, oder gar störend ist – ich möchte es aber erwähnen. Da NixOS ja bei jedem Update den Nix-Store neu sortiert, das System nach der geänderten Deklaration neu baut und den alten Ballast von Bord wirft, dauert ein Update länger, als z.B. ein sudo pacman -Syu auf einem Arch-Linux-System. Parallel weiterarbeiten ist aber kein Problem. Dafür ist das System aber stets frisch und clean gebaut, so als wäre es eine Neuinstallation.

Was ich gelernt habe

NixOS ist nicht das superschwierige Nerd-System. Die Konfigurationsdateien folgen einer glasklaren Logik, die man einmal verstehen muss – und dann läuft es, auch wenn es zu Beginn manchmal ruckelt.
Was ich unterschätzt hatte: die Werkzeuge rund um NixOS (Git, Codeberg, Flakes, Home-Manager) bilden zusammen ein Ökosystem, das man erst kennenlernen muss – da stecken die steilen Rampen in der Lernkurve - aber eben nur dann, wenn man ein Multi-Host-Setup anstrebt.

In Teil 2 schrieb ich:

Es gibt viele technische Gründe für die "Gewaltenteilung" im System, mich persönlich überzeugt aber ein eher philosophischer Grund am meisten: Semantische Klarheit: configuration.nix beschreibt, was das System ist, home.nix beschreibt, was Du bist. Das ist keine technische Notwendigkeit, sondern eine gedankliche Ordnung, die sich auszahlt, sobald die Konfiguration dann doch mal wächst.

Dazu stehe ich auch heute noch, würde aber nach meinem wilden Ritt mit Git und Codeberg heute dazu anmerken:
Gib der deklarativen Idee von NixOS unbedingt eine Chance, bleib aber bei nur einem oder zwei Rechnern erstmal bei der ausschließlichen Konfiguration über die configuration.nix, so wie in Teil 1 meiner Setup-Reihe beschrieben.

Wenn jemand aufgrund meiner Impulse ebenfalls bei NixOS gelandet ist, würde ich mich über einen Kommentar freuen; aber jeder andere Beitrag zu NixOS interessiert mich natürlich ebenso.

Ressourcen

Hier die Konfigurationsdateien für das Go 2. In der flake.nix (siehe Download in Teil 2) ist das Surface natürlich als Teil des Multi-Host-Setups ebenfalls mit aufgeführt:
surface-system.nix
home-surface.nix


GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.

17. September 2026

Die MZLA Technologies Corporation hat mit Thunderbird 156 eine neue Version seines Open Source E-Mail-Clients für Windows, Apple macOS und Linux veröffentlicht.

Neuerungen von Thunderbird 156

Mit Thunderbird 156 hat die MZLA Technologies Corporation ein Update für seinen Open Source E-Mail-Client veröffentlicht. Die neue Version bringt Verbesserungen für bestimmte Authentifizierungs-Szenarien in Zusammenhang mit Yandex sowie OAuth. Debug-Informationen für PGP lassen sich in der Browserkonsole ausgeben. Die Unterstützung für mehrere neue Unternehmensrichtlinien wurde ergänzt. Ansonsten gab es auch wieder eine ganze Reihe von Verbesserungen unter der Haube und Fehlerkorrekturen, welche sich wie immer in den Release Notes (engl.) nachlesen lassen. Auch Sicherheitslücken wurden im neuesten Update wieder behoben.

Der Beitrag Thunderbird 156 veröffentlicht erschien zuerst auf soeren-hentzschel.at.

16. September 2026

Mozilla und Mistral haben gemeinsam eine Partnerschaft angekündigt, um offene, private und mehrsprachige KI für diejenigen Nutzer in den Browser zu bringen, die KI im Browser nutzen wollen. Dabei setzt Mozilla natürlich, wie auch bisher, auf eine optionale und freiwillige Nutzung.

Wie Mozilla und das französische KI-Unternehmen Mistral gemeinsam angekündigt haben, arbeitet man für KI-Funktionen in Firefox zusammen. Konkret geht es dabei um die sogenannten intelligenten Fenster, die bereits schrittweise für Nutzer in den USA, Kanada und Frankreich ausgerollt werden. Über eine eigene Oberfläche können unter anderem komplexe Recherchen zusammengefasst, zuvor besuchte Inhalte wiedergefunden und Informationen aus geöffneten Tabs aufbereitet werden. Eine Ausrollung in Deutschland sowie Großbritannien soll noch in diesem Jahr folgen.

Mozilla stellt für die intelligenten Fenster unter anderem Mistral Small 4 als Modell zur Verfügung. Das Besondere an Mistral: Die Modelle von Mistral sind genau wie Firefox Open Source. Sprache, Dialekte und kulturelle Besonderheiten werden in den Modellen von Mistral von Beginn an berücksichtigt, statt eine primär englischsprachige Lösung lediglich nachträglich zu übersetzen. Und auch der Datenschutz ist ein wichtiger Aspekt: Unterhaltungen werden nicht auf Mozilla-Servern gespeichert und Mistral verpflichtet sich zur Nichtaufbewahrung übermittelter Daten.

Der Beitrag Mozilla und Mistral kündigen Partnerschaft an erschien zuerst auf soeren-hentzschel.at.

15. September 2026

Mozilla hat Firefox 156 für Windows, Apple macOS und Linux veröffentlicht. Dieser Artikel fasst die wichtigsten Neuerungen zusammen.

Download Mozilla Firefox für Microsoft Windows, Apple macOS und Linux

Neuerungen in Firefox 156

Wie auf Windows gibt es nun auch auf macOS eine Einstellung, die aktiviert werden kann, damit Firefox mit dem Starten des Systems direkt mit gestartet werden kann.

In den Einstellungen für die Tab-Umgebungen wurde die neue Option „Keine Tab-Umgebungen für Links verwenden, die von externen Apps geöffnet werden” hinzugefügt.

Auch in Deutschland, Frankreich und Italien können nun direkt in der Adressleiste Vorschläge von Wikipedia oder gesponserte Vorschläge angezeigt werden, was in den Einstellungen zur Suche ein- und ausgeschaltet werden kann.

Der PDF-Betrachter startet jetzt bis zu 45 Prozent schneller. Die Nutzung von CPU und RAM wurde verbessert, wenn große JPEG-Dateien herunterskaliert werden. Und auf Geräten mit ARM64-CPU und Windows gibt es jetzt Hardware-Unterstützung für das Decoding von H.264 in WebRTC-Kommunikation.

Auch in Firefox 156 wurden wieder mehrere Sicherheitslücken geschlossen. Alleine aus Gründen der Sicherheit ist ein Update auf Firefox 156 daher für alle Nutzer dringend empfohlen.

Darüber hinaus gab es diverse Korrekturen, welche in den offiziellen Release Notes näher beschrieben werden, darunter auch das Problem, dass Firefox für manche Nutzer in Zusammenhang mit dem integrierten VPN oder DNS-over-HTTPS Probleme beim Laden von Websites haben konnte. Verbesserungen der Webplattform lassen sich in den MDN web docs nachlesen.

Der Beitrag Mozilla veröffentlicht Firefox 156 erschien zuerst auf soeren-hentzschel.at.

Ich kopiere regelmäßig Dateien auf USB-Sticks oder SD-Karten, die mit FAT32 formatiert sind. Und jedes Mal gibt es Ärger mit Dateinamen, die Zeichen enthalten, die FAT32 nicht erlaubt. Doppelpunkte, Fragezeichen, Sternchen, alles was unter Linux völlig normal ist, wird auf FAT32 zum Problem.

Also habe ich mir ein Bash-Skript geschrieben, das die Arbeit übernimmt. Es durchsucht den aktuellen Ordner, ersetzt alle ungültigen Zeichen und kümmert sich auch um führende oder abschließende Leerzeichen und Punkte. Kollisionen werden vermieden, indem ein Zähler angehängt wird.

Was das Skript macht

Das Skript arbeitet in mehreren Schritten. Zuerst werden alle Dateien im aktuellen Ordner durchlaufen. Für jede Datei wird der Name geprüft und bereinigt.

Die FAT32-verbotenen Zeichen sind der Backslash, der Slash, der Doppelpunkt, das Sternchen, das Fragezeichen, die Anführungszeichen, die spitzen Klammern und die Pipe. Alle diese Zeichen werden durch einen Unterstrich ersetzt.

Zusätzlich werden Steuerzeichen entfernt, also Zeichen mit den Codes 0x00 bis 0x1F. Die tauchen selten auf, aber wenn doch, machen sie Probleme.

Dann werden führende und abschließende Leerzeichen und Punkte entfernt. FAT32 mag das nicht, auch wenn es auf anderen Dateisystemen kein Problem ist.

Wenn der Name danach leer ist, wird ein Notfallname vergeben.

Und schließlich wird geprüft, ob bereits eine Datei mit dem neuen Namen existiert. Falls ja, wird ein Zähler angehängt, um Kollisionen zu vermeiden.

Wie du es verwendest

Speichere das Skript im Ordner, in dem du es verwenden willst unter einem Namen wie z.B. fat32-rename.sh und starte es

bash fat32-rename.sh

Das Skript arbeitet nur im aktuellen Ordner. Unterordner werden nicht durchsucht. Wenn du auch Unterordner bereinigen möchtest, müsstest du es mit find kombinieren oder eine rekursive Variante schreiben.

Was du beachten solltest

Das Skript benennt Dateien um. Wenn du sichergehen möchtest, dass nichts schiefgeht, solltest du vorher ein Backup machen oder zumindest testen, was das Skript tun würde, bevor du es auf wichtige Daten loslässt.

Das Skript überschreibt keine Dateien. Wenn eine Datei mit dem neuen Namen bereits existiert, wird ein Zähler angehängt, sodass der neue Name eindeutig ist.

Das Skript verarbeitet nur Dateien, keine Ordner. Wenn du auch Ordner umbenennen möchtest, müsstest du die Bedingung [ -f "$f" ] entsprechend anpassen.

Fazit

Das Skript hat mir schon viel Zeit gespart. Statt Dateien einzeln umzubenennen, lasse ich es einfach über den Ordner laufen und danach kopiere ich die Dateien auf den FAT32-Datenträger. Das funktioniert zuverlässig und ich muss mir keine Gedanken mehr über ungültige Zeichen machen.

Wenn du häufig mit FAT32 zu tun hast, ist das eine kleine Hilfe, die sich schnell bezahlt macht.

Das Skript

#!/usr/bin/env bash
# Ersetzt FAT32-ungültige Zeichen in Dateinamen im aktuellen Ordner
# Autor: hoergen
# 15.09.2026

for f in *; do
    [ -f "$f" ] || continue

    # FAT32-verbotene Zeichen ersetzen:
    #   \ / : * ? " < > |   ->  _
    # Zusätzlich entfernen: Steuerzeichen (0x00–0x1F) am Anfang/Ende
    new=$(echo "$f" \
        | tr '\\/:*?"<>|' '_________' \
        | tr -d '\000-\037')

    # Führende/abschließende Leerzeichen und Punkte entfernen
    # (FAT32 mag das nicht)
    new=$(echo "$new" | sed -e 's/^[ .]*//' -e 's/[ .]*$//')

    # Leerer Name -> Notfallname
    [ -z "$new" ] && new="unnamed"

    if [ "$f" != "$new" ]; then
        # Kollisionen vermeiden
        if [ -e "$new" ]; then
            base="${new%.*}"
            ext="${new##*.}"
            [ "$base" = "$ext" ] && ext=""
            n=1
            while [ -e "${base}_$n${ext:+.$ext}" ]; do
                n=$((n+1))
            done
            new="${base}_$n${ext:+.$ext}"
        fi
        mv -- "$f" "$new"
        echo "OK  $f -> $new"
    fi
done