Webserver-Umzug Windows zu Linux: Umlaute in Dateinamen

Eigentlich sollte das Thema Zeichencodierung in Dateinamen irgendwann mal durch sein. Ich bin aber beim Umzug einer WordPress-Seite wieder reingerannt. Konkret wurde der wp-content – Ordner mit knapp 400.000 Bild-Dateien von einem Windows 2012 R2 – Webserver aus per winscp auf einen Ubuntu 20.04-Server übertragen. Das Ganze hat ohne Fehler funktioniert, doch bald beschwerte sich die Betreiberin der Webseite über fehlende Bilder. Man sieht das Problem schon:

Offensichtlich hatte die Dame in den Dateinamen Sonderzeichen, zumindest aber mal die Umlaute, gerne verwendet. Immer gefährlich. Beachte stets die Regel 8.3 ohne Leerzeichen 🙂
Ein Blick in den Dateimanager von Plesk zeigt das Problem an (kein UTF-8).

Auch auf der Kommandozeile wird es definitiv nicht besser.

Man hätte nun die ganzen Dateinamen mit Umlauten aus der MySql-Datenbank mit einem regex suchen und ersetzen können, aber im Dateisystem hätte die Umbenennung von „ß“ zu „ss“ usw. wohl nur über einen erneuten Down-/Upload der betroffenen Ordner funktioniert. So sehr Linux-Experte bin ich dann auch nicht, als dass ich ohne Ausgabe von ls, find oder egrep (die ja alle die falschen Namen lieferten) zu Rande komme.
Da wir aber schon im Jahr 2023 sind, habe ich mir einfach vorgestellt, dass man mittlerweile auch mal Umlaute in Dateinamen verwenden kann. Mit dem schönen Tool „convmv“ und seinem Schalter -r (für rekursiv) lief die Fehlerbehebung insofern nur auf einen Befehl hinaus. Hier am Beispiel, man beachte die letzen beiden Zeilen der Ausgabe im dry-run:

… und in echt: convmv -r –notest -f iso-8859-1 -t utf-8 wp-content/uploads

Anschließend leert man den Browsercache und lädt die Seite neu: