Rsync con archivos de caracteres especiales que no funcionan entre Mac y Linux


18

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 --iconvopció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 --iconvopció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?

Respuestas:


18

La solución era vergonzosamente simple: debido a un comentario que leí al investigar el problema, pensé que se suponía que especificabas el conjunto de caracteres en el orden de transformación; pero parece que esa no es la sintaxis correcta. Por el contrario, siempre se debe usar --iconv=utf-8-mac,utf-8cuando se inicializa el rsync desde la mac, y siempre se usa --iconv=utf-8,utf-8-maccuando se inicializa el rsync desde la máquina Linux, no importa si quiero sincronizar archivos desde la máquina Mac o Linux.

¡Entonces funciona como magia!

EDITAR: De hecho, a veces, revisar la página del manual de cerca es algo bueno. Aquí está, negro sobre blanco:

--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.

Uhm ... me está sucediendo desde Ubuntu a Amazon S3 ...: |
Tom Roggero

¡No importa! AWS CLI me lo arregló.
Tom Roggero

Blanco sobre negro;)
Hola Mundo

3

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.