Rsync com arquivos de caracteres especiais que não funcionam entre Mac e Linux

12

Eu quero usar o rsync para fazer backup do meu servidor Ubuntu com um disco residente em um Mac. Mas não consigo que funcione corretamente, pois toda vez que executo novamente a operação de rsync após o tempo inicial, os arquivos com caracteres especiais são primeiro excluídos e, em seguida, sincronizados novamente. Parece que há um problema com diferentes conjuntos de caracteres.

A solução preferida parece ser a de usar a opção --iconv :

  

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

     

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

     

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

Graças a @Jan, eu atualizei minha versão do rsync no meu mac do 2.6.9. para 3.1.1. Ainda assim, ainda não estou lá, pois agora recebo mais um erro:

iconv_open("UTF-8", "utf-8-mac") failed
rsync error: requested action not supported (code 4) at rsync.c(118) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]

Estou com perda de entender porque "ação solicitada não é suportada", já que parece que a versão do rsync no meu Ubuntu (12.04) é pós 3.x.xe, portanto, deve suportar a opção --iconv .

EDIT: Deixe-me acrescentar que quando eu (no Mac, note bene) iniciar um rsync do Mac para o Linux, tudo funciona esplendidamente:

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

Mas indo pelo outro caminho 'do mac não funciona. Curiosamente, o teste para iniciar o rsync a partir da máquina linux processa esta estranha mensagem:

rsync: on remote machine: --iconv=UTF-8-MAC: unknown option
rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-45/rsync/main.c(1333) [server=2.6.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

incluindo a afirmação muito estranha [server=2.6.9] , embora eu tenha atualizado para 3.1.1 no Mac. Por algumas razões, parece que a minha máquina Linux 'vê' apenas a versão original do rsync no Mac.

Alguma sugestão sobre como resolver isso?

    
por Nick The Swede 08.10.2014 / 17:39

2 respostas

12

A solução foi embaraçosamente simples: muito devido a um comentário que li ao pesquisar o problema, achei que você deveria especificar o conjunto de caracteres na ordem de transformação; mas parece que essa não é a sintaxe correta. Em vez disso, deve-se usar sempre --iconv=utf-8-mac,utf-8 ao inicializar o rsync do mac, e sempre usar --iconv=utf-8,utf-8-mac ao inicializar o rsync da máquina linux, não importa se eu quer sincronizar arquivos da máquina mac ou linux.

Então funciona como mágica!

EDIT: Na verdade, às vezes, verificando a página de manual de perto é uma boa coisa a fazer. Aqui está, preto no branco:

--iconv=CONVERT_SPEC
              Rsync  can  convert  filenames between character sets using this
              option.  Using a CONVERT_SPEC of "." tells rsync to look up  the
              default  character-set via the locale setting.  Alternately, you
              can fully specify what conversion to do by giving a local and  a
              remote   charset   separated   by   a   comma   in   the   order
              --iconv=LOCAL,REMOTE, e.g.  --iconv=utf8,iso88591.   This  order
              ensures  that the option will stay the same whether you're push-
              ing  or  pulling  files.
    
por Nick The Swede 24.10.2014 / 13:13
1

Eu posso confirmar que isso funciona, eu estava tendo o mesmo problema. No meu caso, qualquer arquivo com um caractere acentuado era ilegível no destino. Eu só vi isso executando uma comparação de pastas no meu Mac usando o aplicativo Comparar Pastas: link

Adicionado o --iconv = utf-8-mac, utf-8 e BOOM acima! O rsync substituiu todos os arquivos acentuados por um novo.

Para adicionar algumas informações, parece que os links acima não funcionam mais, para atualizar o rsync para 3.1.2, instalar Macports e executar: sudo port install rsync

A razão pela qual você estava vendo o servidor remoto retornando a versão 2.6.9 é porque a versão antiga ainda está lá e o servidor remoto está vendo aquela em vez da nova.

A versão 2.6.9 está localizada em / usr / bin

    
por vandit6354 27.08.2017 / 09:47