Frage Konvertieren von UTF-8 NFD-Dateinamen in UTF-8 NFC, entweder in rsync oder afpd


Ich habe einen Home-Dateiserver, auf dem FreeNAS 8 läuft. Vor ein paar Tagen habe ich mit rsync meine gesamte iTunes-Bibliothek vom Mac hochgeladen, damit ich meine Bibliothek über das Netzwerk statt über ein langsames USB-Laufwerk laden konnte. Das hat größtenteils funktioniert, und iTunes läuft jetzt viel besser, aber ich habe Probleme beim Zugriff auf Songs, die nicht-ASCII-Zeichen enthalten (ich habe zuerst das Problem beim Laden von Queensrÿche-Tracks bemerkt). Die Dateien würden im Finder angezeigt, aber jeder Versuch, auf sie zuzugreifen, ließ sie verschwinden, bis ich wieder mit dem Server verbunden wurde.

Nach einigen Recherchen fand ich heraus, dass OSX eine andere UTF-Zeichenreihenfolge von Linux verwendet. OSX-Dateisysteme verwenden Unicode Normalization Form D (NFD), wobei Linux Form C (NFC) verwendet. Rsync konvertiert diese Formulare nicht, wenn es die Kopie von meinem Mac auf den Server ausführt, jetzt, wenn iTunes versucht, auf eine Datei mit einem speziellen Zeichen über das Netzwerk zuzugreifen, haben die Dateien auf dem Server die falsche Kodierung und afpd-Berichte. t existieren.

Was ist der beste Weg, um dieses Problem anzugehen? Ist es möglich, dass rsync die Unicode-Konvertierung beim Hochladen der Basisbibliothek auf den Server durchführt? Kann ich afpd zum Senden / Empfangen von Dateinamen im NFD-Format konfigurieren? Gibt es eine einfache Lösung, um die Dateinamen auf dem Server zu ändern? Ich habe ein paar Sachen über ein Programm namens Convmv gefunden, aber ich weiß nicht, ob ich das auf FreeNAS ausführen kann.


20
2018-06-10 23:09


Ursprung


Klingt wie ein Fehler mit der OS X-Version von rsync. - Ignacio Vazquez-Abrams


Antworten:


Etwas das sollte Arbeit ist rsyncing zwischen dem Quellverzeichnis und der eingehängtes Remote-Dateisystem (SMB, NFS, AFP), die rsync nur als lokales Dateisystem behandelt.

Allerdings weiß ich nicht, wie gut das in der Praxis funktioniert, und Sie müssen verschiedene Probleme behandeln, zum Beispiel wird der Delta-Transfer-Algorithmus nicht standardmäßig verwendet (da Quelle und Ziel "lokal" sind) (vielleicht - no-whole-file wird funktionieren?), Sie müssen z. B. überprüfen, ob SMB die Änderungszeiten effektiv beibehält.


4
2017-07-13 10:30



Das ist letztendlich, was ich getan habe. Ich löschte die gesamte Sammlung vom NAS und führte rsync erneut unter Verwendung der lokal angehängten CIFS-Verbindung anstelle des rsync-Dämons auf dem NAS aus. Jetzt behebe ich nur itunes Probleme von der Groß- / Kleinschreibung des Dateinamens. : / - ChiperSoft


Sie können rsync verwenden --iconv Option, um zwischen UTF-8 NFC und NFD zu konvertieren, zumindest wenn Sie auf einem Mac sind. Es gibt ein besonderes utf-8-mac Zeichensatz, der für UTF-8 NFD steht. Um also Dateien von Ihrem Mac auf Ihren NAS zu kopieren, müssen Sie Folgendes ausführen:

rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

Dadurch werden alle lokalen Dateinamen von UTF-8 NFD in UTF-8 NFC auf dem Remote-Server konvertiert. Der Inhalt der Dateien ist davon nicht betroffen.


47
2017-09-13 18:18



Ich bin nicht das Original-Poster, also liegt es nicht an mir, aber das ist eine viel sauberere und effizientere Lösung als die, die als akzeptiert markiert ist. Dies mit Sicherheit zu tun, wird so nützlich sein. - ItsGC
Gute Antwort; Ich hatte keine Ahnung UTF8-MAC steht für NFD; wenn verwendet mit iconv Dies bietet einen generischen Mechanismus zum Übersetzen zwischen NFC und NFD. - mklement
große antwort, das löst ein lange bestehendes problem bei der synchronisierung eines mac mit einem linux server! - meduz
Auf Mac können Sie auch benötigen brew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash - SaveTheRbtz


Momentan benutze ich rsync --iconv so was:

Kopieren von Dateien vom Linux-Server auf OS X-Rechner

Sie sollten diesen Befehl ausführen von OS X Maschine:

rsync -a --delete --iconv=UTF-8-MAC,UTF-8 'username@server.ip.address.here:/home/username/path/on/server/' /Users/username/path/on/machine/

Dateien von OS X-Rechner auf Linux-Server kopieren

Sie sollten diesen Befehl ausführen von OS X Maschine:

rsync -a --delete --iconv=UTF-8-MAC,UTF-8 /Users/username/path/on/machine/ 'username@server.ip.address.here:/home/username/path/on/server/'

6
2017-09-10 14:13





Verwenden Sie rsync nicht, um die Dateien auf Ihren NAS zu kopieren. Wenn Sie rsync verwenden, um die Dateien zu kopieren, werden die Dateinamen auf Ihrem NAS im UTF NFD-Format gespeichert (d. H. Im OSX-Format), Samba-Server auf Ihrem NAS können jedoch nur Dateinamen im UTF-NFC-Format verarbeiten. Verwenden Sie die CIFS / SMB (Samba) -Schnittstelle, um die Dateien zu kopieren und alles wird gut.


0
2018-06-29 06:21





Aus meiner Erfahrung empfehle ich, SMB anstelle von SSH zu verwenden. Iconv löst das Problem mit der Kodierung, aber es gibt immer noch Probleme mit erlaubten Zeichen auf verschiedenen Systemen:

Ursprünglicher Dateiname auf dem Mac:

https-//img-9gag-fun.9cache.com/photo/adK9jzN_460s

Nach dem Kopieren von rsync über SMB:

-as seen by Mac (over SMB):     https-//img-9gag-fun.9cache.com/photo/adK9jzN_460s
-as seen by Ubuntu (over SMB):  https-img-9gag-fun.9cache.comphotoadK9jzN_460s
-as seen by Windows10 (over SMB):   https-∀∀img-9gag-fun.9cache.com∀photo∀adK9jzN_460s
-as seen by Ubuntu server locally:  https-img-9gag-fun.9cache.comphotoadK9jzN_460s

Nach dem Kopieren durch rsync über ssh (mit ant ohne iconv Flag):

-as seen by Mac (over SMB):     H0INHQ~6
-as seen by Ubuntu (over SMB):  H0INHQ~6
-as seen by Windows10 (over SMB):   H0INHQ~6
-as seen by Ubuntu server locally:  https-::img-9gag-fun.9cache.com:photo:adK9jzN_460s

0
2018-05-06 07:42