web-dev-qa-db-fra.com

Conversion des noms de fichiers UTF-8 NFD en UTF-8 NFC, dans RSYNC ou AFPD

J'ai un serveur de fichiers domestique exécutant freenas 8. Quelques jours il y a quelques jours, j'ai utilisé RSYNC pour télécharger toute ma bibliothèque iTunes de Mac afin que je puisse charger ma bibliothèque sur le réseau au lieu d'un lecteur USB lent. Cela a principalement travaillé et iTunes fonctionne beaucoup mieux maintenant, mais je rencontre des problèmes d'accès à toutes les chansons qui possèdent des caractères non-ASCII (j'ai tout d'abord remarqué le problème lors du chargement des pistes Queensrÿche). Les fichiers apparaîtraient dans le Finder, mais toute tentative d'accès à ceux-ci les ont fait disparaître jusqu'à ce que je reconnaisse au serveur.

Après quelques recherches que j'ai découvertes, ceci est parce que OSX utilise un autre ordre de caractères UTF de Linux. Les systèmes de fichiers OSX utilisent le formulaire de normalisation UNICODE D (NFD), où Linux utilise le formulaire C (NFC). Rsync ne convert pas ces formulaires lorsqu'il effectue la copie de mon Mac vers le serveur, maintenant lorsque iTunes tente d'accéder à un fichier avec un caractère spécial sur le réseau, les fichiers du serveur ont les mauvais codage et les rapports AFPD qu'ils ne font pas ' existe existent.

Quel est le meilleur moyen de résoudre ce problème? Est-il possible de rendre RSYNC Effectuer la conversion Unicode tout en téléchargeant la bibliothèque de base sur le serveur? Puis-je configurer AFPD pour transmettre/recevoir des noms de fichiers au format NFD? Existe-t-il une solution facile pour modifier les noms de fichiers sur le serveur? J'ai trouvé des trucs d'un programme nommé Convemv, mais je ne sais pas si je peux courir cela sur Freeenas.

26
ChiperSoft

Remarque: Si vous utilisez la version 3.0.0 ou plus récente de RSYNC, le --iconv L'option mentionnée dans les autres réponses est clairement la solution supérieure.

Quelque chose qui devrait fonctionner est la rsyncing entre le répertoire source et le système de fichiers distant monté (SMB, NFS, AFP), que RSSNC traitera simplement en tant que système de fichiers local.

Cependant, je ne sais pas comment cela fonctionne dans la pratique et vous devez travailler autour de différents problèmes, par exemple, l'algorithme de transfert Delta ne sera pas utilisé par défaut (car la source et la destination sont "locales") (peut-être - Le fichier non complet fonctionnera?), vous devez vérifier, par exemple, que SMB conserve efficacement les temps de modification, etc.

4
LCC

Vous pouvez utiliser l'option --iconv de RSYNC pour convertir entre UTF-8 NFC & NFD, au moins si vous êtes sur un Mac. Il existe un ensemble de caractères spécial utf-8-mac qui signifie UTF-8 NFD. Donc, pour copier des fichiers de votre Mac à votre NAS, vous devez exécuter quelque chose comme:

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

Cela convertira tous les noms de fichiers locaux de UTF-8 NFD en UTF-8 NFC sur le serveur distant. Le contenu des fichiers ne sera pas affecté.

53
Lennart L

Actuellement j'utilise rsync --iconv comme ça:

Copier des fichiers de Linux Server à OS X Machine

Vous devez exécuter cette commande à partir de la machine OS X:

rsync -a --delete --iconv=UTF-8-MAC,UTF-8 '[email protected]:/home/username/path/on/server/' /Users/username/path/on/machine/

Copier des fichiers de la machine OS X à Linux Server

Vous devez exécuter cette commande à partir de la machine OS X:

rsync -a --delete --iconv=UTF-8-MAC,UTF-8 /Users/username/path/on/machine/ '[email protected]:/home/username/path/on/server/'
7
Envek

N'utilisez pas RSYNC pour copier les fichiers sur votre NAS. Lorsque vous utilisez RSYNC pour copier les fichiers, les noms de fichiers seront stockés sur votre NAS au format NFD UTF (au format OSX), mais Samba Server s'exécutant sur votre NAS = ne comprend que UTF NFC Cames de fichier au format. Utilisez l'interface CIFS/SMB (SAMBA) pour copier les fichiers et tout ira bien.

1
whyme

De mon expérience, je vous recommande d'utiliser SMB au lieu de SSH. Iconv résout le problème avec le codage, mais il existe toujours un problème de caractères autorisés sur différents systèmes:

Nom du fichier original sur Mac:

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

Après copie par RSYNC sur 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

Après copie par rsync sur ssh (avec fourmi sans drapeau iconv):

-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
lukdz