rsync --iconv opção no Mac não funciona (sincronização de servidor Linux remoto para Mac local)

8

Eu quero usar o rsync para fazer backup de dados de um servidor Linux remoto para o meu Mac local. E eu quero inicializar esta operação no meu Mac local. Tudo funciona bem, exceto que há um problema de caractere especial: toda vez que executo novamente a operação de rsync (após a sincronização inicial), os arquivos com caracteres especiais são primeiro excluídos e, em seguida, sincronizados novamente. Pelo que entendi, há um problema com diferentes conjuntos de caracteres, e a solução preferida parece ser a de usar a --iconv option:

You can use rsync's --iconv option to convert between UTF-8 NFC & NFD, at least if you're on a Mac. There is a special utf-8-mac character set that stands for UTF-8 NFD. So to copy files from your Mac to your NAS, you'd need to run something like:

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

This will convert all the local filenames from UTF-8 NFD to UTF-8 NFC on the remote server. The files' contents won't be affected.

O problema é que isso só funciona "one way" para mim, ou seja, quando sincronizando do Mac para o Linux. Mas eu quero ir para o outro lado, ou seja, sincronizar a partir da máquina linux para o Mac. E eu quero inicializar a operação do meu Mac local. Mas quando eu tento:

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

Eu recebo 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 para entender por que isso não funciona. Minha versão do rsync no Mac é atualizada a partir do 2.6.9. para 3.1.1. usando Macports . Note que a operação funciona quando eu (no Mac, note bene) inicio um rsync DO MAC TO Linux:

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

Mas indo pelo outro caminho 'do mac - que é o que eu quero fazer - não funciona.

Curiosamente, o teste para iniciar a sincronização da máquina linux renderiza essa 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, note, 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?

ATUALIZAÇÃO 23 de outubro : A excelente sugestão de Per Johnson (ver abaixo), iniciando a sincronização do servidor linux, agora funciona. Para completar, tentei agora todas as combinações, e um padrão interessante surge:

no MAC:

OBRAS: Arquivos do Mac para o Linux

FALHA: Arquivos do Linux para o Mac

NO LINUX

FUNCIONA: Arquivos do Linux para o Mac

FALHA: Arquivos do Mac para o Linux

Em outras palavras, a opção --iconv parece funcionar apenas de uma maneira, com arquivos da máquina local para o controle remoto, e não o contrário. Parece um erro para mim, mas talvez seja assim que é suposto trabalhar?

Alguém capaz de compartilhar luz sobre isso?

    
por Nick The Swede 20.10.2014 / 15:30

2 respostas

9
Depois de muita experimentação, e muito devido às sugestões úteis de @Lee Johnson, eu finalmente descobri a solução, que agora me parece embaraçosamente óbvia. 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

SEMPRE use --iconv=utf-8-mac,utf-8 ao inicializar o rsync do mac, e SEMPRE use --iconv=utf-8,utf-8-mac ao inicializar o rsync da máquina linux, não importa se eu quero sincronizar arquivos da máquina mac ou linux.

Então funciona como mágica!

    
por 24.10.2014 / 13:00
4

Você fez recentemente a atualização para o OS X Yosemite? Eu tive o mesmo problema, antes de me lembrar que tinha atualizado / usr / bin / rsync com a versão 3.1. Quando fiz o upgrade para o Yosemite, este foi substituído pela antiga versão 2.6.9.

No meu caso, consertei o problema no Mac ligando novamente meu 3.1 rsync em / usr / bin:

sudo -s
cd /usr/bin
mv rsync rsync-2.6.9
ln -s /usr/local/bin/rsync .
exit
    
por 22.10.2014 / 07:05