Converter nomes de arquivos NFD UTF-8 para NFC UTF-8, em rsync ou afpd

21

Eu tenho um servidor de arquivos em casa que executa o FreeNAS 8. Há alguns dias usei o rsync para carregar toda a minha biblioteca do iTunes a partir do Mac para que eu pudesse carregar minha biblioteca pela rede em vez de usar uma unidade USB lenta. Isso funcionou principalmente, e o iTunes roda muito melhor agora, mas estou com problemas para acessar qualquer música que tenha caracteres não-ASCII (notei o problema ao carregar faixas do Queensrÿche). Os arquivos apareceriam no Finder, mas qualquer tentativa de acessá-los fazia com que eles desaparecessem até eu me reconectar ao servidor.

Depois de algumas pesquisas, descobri que isso ocorre porque o OSX usa uma ordem de caractere UTF diferente do Linux. Os sistemas de arquivos OSX usam o Unicode Normalization Form D (NFD), onde o linux usa o Form C (NFC). O Rsync não converte esses formulários quando executa a cópia do meu mac para o servidor, agora quando o iTunes tenta acessar um arquivo com um caractere especial pela rede, os arquivos no servidor têm a codificação incorreta e os relatórios afpd não existe.

Qual é a melhor maneira de resolver esse problema? É possível fazer o rsync executar a conversão unicode ao fazer o upload da biblioteca base para o servidor? Posso configurar o afpd para transmitir / receber nomes de arquivos no formato NFD? Existe uma solução fácil para alterar os nomes dos arquivos no servidor? Eu encontrei algumas coisas sobre um programa chamado convmv, mas não sei se posso executá-lo no FreeNAS.

    
por ChiperSoft 11.06.2012 / 01:09

5 respostas

4

Note: If you are using version 3.0.0 or newer of rsync, the --iconv option as mentioned in the other answers is clearly the superior solution.

Algo que deve funcionar é rsyncing entre o diretório de origem e o sistema de arquivos remoto montado (SMB, NFS, AFP), que o rsync tratará apenas como sistema de arquivos local .

No entanto, eu não sei quão bem isso funciona na prática, e você tem que trabalhar em torno de diferentes problemas, por exemplo, o algoritmo de transferência delta não será usado por padrão (já que origem e destino são "locais") talvez --no-whole-file funcione?), você tem que verificar, por exemplo, que o SMB efetivamente preserva tempos de modificação, etc.

    
por 13.07.2012 / 12:30
47

Você pode usar a opção --iconv do rsync para converter entre NFC & UTF-8; NFD, pelo menos se você estiver em um Mac. Há um conjunto especial de caracteres utf-8-mac que significa UTF-8 NFD. Então, para copiar arquivos do seu Mac para o seu NAS, você precisa executar algo como:

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

Isso converterá todos os nomes de arquivos locais de NFD UTF-8 para NFC UTF-8 no servidor remoto. O conteúdo dos arquivos não será afetado.

    
por 13.09.2012 / 20:18
6

Atualmente, estou usando rsync --iconv da seguinte forma:

Copiando arquivos do servidor Linux para a máquina OS X

Você deve executar este comando da máquina OS X :

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

Copiando arquivos da máquina OS X para o servidor Linux

Você deve executar este comando da máquina OS X :

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

Não use o rsync para copiar os arquivos para o seu NAS. Quando você usa o rsync para copiar os arquivos, os nomes dos arquivos serão armazenados no seu NAS no formato UTF NFD (ou seja, no formato OSX), mas o servidor Samba em execução no seu NAS entende apenas nomes de arquivos no formato NFC UTF. Use a interface CIFS / SMB (Samba) para copiar os arquivos e tudo ficará bem.

    
por 29.06.2012 / 08:21
0

Da minha experiência, recomendo usar o SMB em vez do ssh. Iconv resolve problema com codificação, mas ainda há problema com caracteres permitidos em sistemas diferentes:

Nome do arquivo original no Mac:

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

Após a cópia por rsync em 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

Após copiar por rsync sobre ssh (com formiga sem flag 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
    
por 06.05.2018 / 09:42