Quiero usar rsync para hacer una copia de seguridad de mi servidor Ubuntu con un disco que reside en una Mac. Pero no logro que funcione correctamente, ya que cada vez que vuelvo a ejecutar la operación rsync después del tiempo inicial, los archivos con caracteres especiales se eliminan primero y luego se vuelven a sincronizar. Parece que hay un problema con diferentes conjuntos de caracteres.
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.
Gracias a @Jan, actualicé mi versión de rsync en mi mac desde 2.6.9. a 3.1.1. Aún así, todavía no estoy del todo allí, ya que ahora recibo un error adicional:
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 entiendo por qué "la acción solicitada no es compatible", ya que parece que la versión rsync en mi Ubuntu (12.04) es posterior a 3.xx, por lo que debería admitir la --iconv
opción.
EDITAR: Permítanme agregar que cuando yo (en Mac, nota bene) inicio un rsync DESDE Mac a Linux, todo funciona espléndidamente:
rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Pero ir al revés 'desde el mac no funciona. Por extraño que parezca, la prueba para iniciar el rsync 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 el reclamo muy extraño [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 original de rsync en la Mac.
¿Alguna sugerencia sobre cómo resolver esto?
Puedo confirmar que esto funciona, estaba teniendo el mismo problema. En mi caso, cualquier archivo con un carácter acentuado era ilegible en el destino. Solo lo vi ejecutando una comparación de carpetas en mi Mac usando la aplicación Comparar carpetas: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12
Se agregó lo anterior --iconv = utf-8-mac, utf-8 y BOOM! rsync reemplazó cada archivo acentuado por uno nuevo.
Para agregar información, ya que parece que los enlaces anteriores ya no funcionan, para actualizar rsync a 3.1.2, instale Macports y ejecute: sudo port install rsync
La razón por la que estaba viendo que el servidor remoto devolvía la versión 2.6.9 es porque la versión anterior todavía está allí y el servidor remoto está viendo esa en lugar de la nueva.
La versión 2.6.9 se encuentra en / usr / bin
fuente