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?