Quiero usar rsync para hacer una copia de seguridad de los datos de un servidor Linux remoto en mi Mac local. Y quiero iniciar esta operación en mi Mac local. Todo funciona bien, excepto que hay un problema especial de caracteres: cada vez que vuelvo a ejecutar la operación rsync (después de la sincronización inicial), los archivos con caracteres especiales se eliminan primero y luego se vuelven a sincronizar. Según tengo entendido, hay un problema con los diferentes conjuntos de caracteres, y la solución preferida parece ser usar la --iconv
opción:
Puede usar la opción --iconv de rsync para convertir entre UTF-8 NFC y NFD, al menos si está en una Mac. Hay un conjunto de caracteres utf-8-mac especial que significa UTF-8 NFD. Entonces, para copiar archivos de su Mac a su NAS, necesitaría ejecutar algo como:
rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Esto convertirá todos los nombres de archivos locales de UTF-8 NFD a UTF-8 NFC en el servidor remoto. El contenido de los archivos no se verá afectado.
El problema es que esto solo funciona 'de una manera' para mí, es decir, cuando se sincroniza desde Mac a Linux. Pero quiero 'ir hacia otro lado', es decir, sincronizar DESDE la máquina Linux a la Mac. Y quiero iniciar la operación desde mi Mac local. Pero cuando lo intento:
rsync -av --delete --iconv=utf-8,utf-8-mac mynas:remotedir/ localdir/
Recibo un error:
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]
No puedo entender por qué esto no funciona. Mi versión rsync en Mac se actualizó desde 2.6.9. a 3.1.1. usando Macports . Tenga en cuenta que la operación funciona cuando yo (en Mac, nota bene) inicio un rsync DESDE Mac hacia Linux:
rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Pero ir al otro lado 'desde el mac, que es lo que quiero hacer, no funciona.
Por extraño que parezca, la prueba para iniciar la sincronización desde la máquina Linux genera este extraño mensaje:
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]
incluyendo, tenga en cuenta, la afirmación muy extraña [server=2.6.9]
, aunque he actualizado a 3.1.1 en Mac. Por algunas razones, parece que mi máquina Linux 've' solo la versión rsync original en la Mac.
¿Alguna sugerencia sobre cómo resolver esto?
ACTUALIZACIÓN 23 de octubre : según la excelente sugerencia de @Lee Johnson (ver más abajo), iniciar la sincronización desde el servidor Linux ahora funciona. Para completar, ahora he probado todas las combinaciones, y surge un patrón interesante:
EN MAC:
OBRAS: archivos de Mac a Linux
FALLOS: archivos de Linux a Mac
EN LINUX
OBRAS: archivos de Linux a Mac
FALLOS: archivos de Mac a Linux
En otras palabras, la --iconv
opción parece funcionar solo de una manera, con archivos desde la máquina local al remoto, no al revés. A mí me parece un error, pero ¿tal vez así se supone que funcione?
¿Alguien capaz de compartir luz sobre esto?
.DS_Store
de las sincronizaciones y debido a esto OSX no pudo eliminar directorios con estos archivos dentro. Configuré los juegos de caracteres con --iconv
, la ruta rsync en el mac con --rsync-path
(estoy usando homebrew), y luego tuve que agregar --delete-excluded
para que los tercos directorios pudieran eliminarse.
rsync
(por ejemplo, de homebrew) en el mac y se llama desde Linux, es necesario especificar la ruta correcta usando--rsync-path="/usr/local/bin/rsync"