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

Cuando transportamos un sistema de archivos CMS y un volcado mysql 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 estuvo activo en el otro servidor Linux, todos los archivos de imágenes estáticas estuvieron disponibles. Pero todos los nombres de archivo con diéresis en alemán no fueron encontrados por el CMS, aunque estaban visibles y accesibles. Rápidamente descubrimos que sucede exactamente esto:

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 allí un rsync para copiar el directorio a mi Mac...

mac$ rsync -a user@linux:umlauttest .

Y luego cópielo de nuevo desde mi Mac a Linux:

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

Entonces tengo realmente 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 del nombre de archivo en caracteres Unicode compuestos, lo que en realidad es algo que yo llamo metadatos manipulados. Este comportamiento también surge al usar scppara copiar archivos.

¿Hay alguna manera de evitar que esto suceda?

Respuestas (1)

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

Cuando copie desde el servidor Linux a la Mac, agregue lo siguiente al rsynccomando:

--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 --iconvopción. Apple proporciona solo una versión anterior, por lo que debe ir a otro sitio, por ejemplo, un administrador de paquetes como Macports o Homebrew