J'ai un serveur de fichiers à domicile exécutant FreeNAS 8. Il y a quelques jours, j'ai utilisé rsync pour télécharger l'intégralité de ma bibliothèque iTunes à partir de Mac afin de pouvoir charger ma bibliothèque sur le réseau plutôt que sur une clé USB lente. Cela a surtout fonctionné, et iTunes fonctionne beaucoup mieux maintenant, mais je rencontre des problèmes pour accéder à toutes les chansons qui contiennent des caractères non ascii (j'ai d'abord remarqué le problème lors du chargement des pistes Queensrÿche). Les fichiers s'afficheraient dans le Finder, mais toute tentative d'y accéder les faisait disparaître jusqu'à ce que je me reconnecte au serveur.
Après quelques recherches, j'ai découvert que c'était parce qu'OSX utilise un ordre de caractères UTF différent 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 convertit pas ces formulaires lorsqu'il effectue la copie de mon mac vers le serveur, maintenant quand iTunes essaie d'accéder à un fichier avec un caractère spécial sur le réseau, les fichiers sur le serveur ont le mauvais encodage et les rapports afpd qu'ils ne font pas '' n'existe pas.
Quelle est la meilleure façon de résoudre ce problème? Est-il possible de faire rsync effectuer la conversion unicode lors du téléchargement de 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 simple pour changer les noms de fichiers sur le serveur? J'ai trouvé des informations sur un programme nommé convmv, mais je ne sais pas si je peux l'exécuter sur FreeNAS.
Réponses:
Quelque chose qui devrait fonctionner est la synchronisation entre le répertoire source et le système de fichiers distant monté (SMB, NFS, AFP), que rsync traitera simplement comme un système de fichiers local.
Cependant, je ne sais pas si cela fonctionne bien dans la pratique, et vous devez contourner différents problèmes, par exemple l'algorithme de transfert delta ne sera pas utilisé par défaut (puisque la source et la destination sont «locales») (peut-être - aucun fichier entier ne fonctionnera?), vous devez vérifier, par exemple, que SMB préserve efficacement les temps de modification, etc.
la source
Vous pouvez utiliser l'
--iconv
option de rsync pour convertir entre UTF-8 NFC et NFD, au moins si vous êtes sur un Mac. Il existe unutf-8-mac
jeu de caractères spécial qui signifie UTF-8 NFD. Donc, pour copier des fichiers de votre Mac vers votre NAS, vous devez exécuter quelque chose comme: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é.
la source
UTF8-MAC
acronyme de NFD; lorsqu'il est utilisé aveciconv
lui-même, cela fournit un mécanisme générique pour la traduction entre NFC et NFD.brew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
rsync: --iconv: unknown option
Actuellement, j'utilise
rsync --iconv
comme ceci:Copie de fichiers d'un serveur Linux vers une machine OS X
Vous devez exécuter cette commande depuis la machine OS X :
Copie de fichiers d'une machine OS X sur un serveur Linux
Vous devez exécuter cette commande depuis la machine OS X :
la source
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 UTF NFD (c'est-à-dire le format OSX) mais le serveur Samba fonctionnant sur votre NAS ne comprend que les noms de fichiers au format UTF NFC. Utilisez l'interface CIFS / SMB (Samba) pour copier les fichiers et tout ira bien.
la source
D'après mon expérience, je recommande d'utiliser SMB au lieu de ssh. Iconv résout le problème d'encodage, mais il y a toujours un problème avec les caractères autorisés sur différents systèmes:
Nom de fichier d'origine sur Mac:
Après copie par rsync sur SMB:
Après copie par rsync sur ssh (avec fourmi sans drapeau iconv):
la source