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?