¿Cómo puedo evitar la mutilación de datos en los nombres de archivo al copiar archivos entre Linux y macOS?

2

Cuando transportamos un sistema de archivos CMS y mysql dump a través de rsync de un servidor Linux a otro servidor Linux, usamos un MacOS en el medio para almacenar los datos temporalmente. Después de que el CMS estuviera en el otro servidor Linux, todos los archivos de imágenes estáticas estaban disponibles. Pero todos los nombres de archivo con diéres alemanes no fueron encontrados por el CMS, aunque fueron visibles y accesibles. Rápidamente nos dimos cuenta de que exactamente esto sucede:

Cuando creo un nombre de archivo con diéresis alemanas en Linux como este:

linux$ mkdir umlauttest
linux$ touch umlauttest/äöü

Y luego vaya a una Mac y emita un rsync para copiar el directorio a mi Mac ...

mac$ rsync -a user@linux:umlauttest .

Y luego copiarlo de nuevo desde mi Mac a Linux:

mac$ rsync -a umlauttest/. user@linux:umlauttest2

Entonces realmente tengo un problema en mi Linux, porque el nombre del archivo está roto.

linux$ diff umlauttest umlauttest2
Only in umlauttest2: äöü
Only in umlauttest: äöü

Es decir, porque MacOS de hecho está convirtiendo los caracteres de nombre de archivo en caracteres Unicode compuestos, que en realidad es algo que llamo metadatos de mutilación. Este comportamiento también surge al utilizar scp para copiar archivos.

¿Hay alguna manera de evitar que esto suceda?

    
pregunta itsafire 21.12.2016 - 11:51

1 respuesta

2

Use la opción --iconv para rsync para especificar cómo se codifican los nombres de los archivos en los hosts locales y remotos, esto podría ayudarlo a mantener los nombres de los archivos intactos.

Cuando copia desde el servidor Linux a la Mac, agregue lo siguiente al comando rsync :

--iconv=utf-8,utf-8-mac 

Al copiar desde la Mac al servidor Linux, use lo siguiente:

--iconv=utf-8-mac,utf-8 

Tenga en cuenta que necesita una versión relativamente nueva de rsync (> 3.0) para tener la opción --iconv . Apple suministra solo una versión anterior, por lo que debe ir a otro sitio, por ejemplo. un gestor de paquetes como Macports o Homebrew

    
respondido por el jksoegaard 21.12.2016 - 12:01

Lea otras preguntas en las etiquetas