Wie kann ich Datenverstümmelungen in Dateinamen vermeiden, wenn ich Dateien zwischen Linux und macOS kopiere?

Als wir ein CMS-Dateisystem und einen MySQL-Dump über rsync von einem Linux-Server zu einem anderen Linux-Server transportierten, verwendeten wir ein MacOS in der Mitte, um die Daten vorübergehend zu speichern. Nachdem das CMS auf dem anderen Linux-Server hochgefahren war, waren alle statischen Bilddateien verfügbar. Aber alle Dateinamen mit deutschen Umlauten wurden vom CMS nicht gefunden, obwohl sie sichtbar und zugänglich waren. Wir fanden schnell heraus, dass genau das passiert:

Wenn ich unter Linux einen Dateinamen mit deutschen Umlauten so erstelle:

linux$ mkdir umlauttest
linux$ touch umlauttest/äöü

Und dann gehen Sie zu einem Mac und geben Sie dort ein rsync aus, um das Verzeichnis auf meinen Mac zu kopieren ...

mac$ rsync -a user@linux:umlauttest .

Und dann kopiere es von meinem Mac zurück nach Linux:

mac$ rsync -a umlauttest/. user@linux:umlauttest2

Dann habe ich wirklich ein Problem auf meinem Linux, weil der Dateiname irgendwie kaputt ist.

linux$ diff umlauttest umlauttest2
Only in umlauttest2: äöü
Only in umlauttest: äöü

Das liegt daran, dass MacOS die Dateinamenszeichen tatsächlich in zusammengesetzte Unicode-Zeichen konvertiert, was ich wirklich als Verstümmelung von Metadaten bezeichne. Dieses Verhalten tritt auch beim scpKopieren von Dateien auf.

Gibt es eine Möglichkeit, dies zu verhindern?

Antworten (1)

Verwenden Sie die --iconvOption für rsync, um anzugeben, wie Dateinamen auf den lokalen und entfernten Hosts codiert werden – dies könnte Ihnen dabei helfen, die Dateinamen intakt zu halten.

Wenn Sie vom Linux-Server auf den Mac kopieren, fügen Sie dem rsyncBefehl Folgendes hinzu:

--iconv=utf-8,utf-8-mac 

Verwenden Sie beim Kopieren vom Mac auf den Linux-Server Folgendes:

--iconv=utf-8-mac,utf-8 

Beachten Sie, dass Sie eine relativ neue Version von rsync (>3.0) benötigen, um die --iconvOption zu haben. Apple liefert nur eine alte Version, also müssen Sie zu einer anderen Seite gehen, zB zu einem Paketmanager wie Macports oder Homebrew