Hacer rsync mayúsculas insensibles

3

Estoy sincronizando un montón de archivos entre un sistema Windows y un sistema Linux. Como no todos los Windows cuidan del caso, algunos de los archivos en el sistema Windows ya no tienen la misma carcasa que tenían en el sistema Linux. Pero rsync ahora trata estos archivos como diferentes y carga una nueva copia.

¿Es posible que rsync ignore el caso?

Wim
fuente

Respuestas:

3

Normalmente, windows ignora caso, pero conservas eso. Si sus nombres de archivo cambian de caso, debe ser debido a algún otro programa que no sea rsync, que copió los archivos y modificó el caso durante la copia. Ese programa probablemente esté mal configurado. O si usa un servidor Samba, tal vez eso está mal configurado. Por defecto, Samba también conserva el caso de los nombres de archivo.

Entonces, tal vez pueda resolver el problema de los nombres de archivos que cambian inesperadamente su caso.

Entonces te quedas con " solamente "el problema de la sensibilidad de los filtros a las mayúsculas y minúsculas. Si ese es tu caso y te resistes a aplicar el parche sugerido por Wim, puedes usar clases de caracteres en los filtros.

Es feo y molesto, pero funciona:

--exclude="[Tt][Ee][Mm][Pp]/"

o en un archivo de filtro:

- Temp/
- temp/
- TEMP/

o el más genérico pero ilegible:

- [Tt][Ee][Mm][Pp]/ 

Si desea automatizar la conversión de los archivos de filtro a esta sintaxis, puede usar este comando perl:

perl -i.bak -pe 's/([a-z])/[\U$1\E$1]/g' your_rsync-filter.txt

Y convertirlo de nuevo a forma legible por humanos con

perl -i.bak  -pe 's/ \[ [A-Z] ([a-z]) \] /$1/xg' your_rsync-filter.txt

(Los -i.bak La opción realiza una copia de seguridad y convierte el archivo en el lugar en lugar de a la salida estándar.

Al menos para los filtros y las opciones de inclusión / exclusión, sería muy bueno tener un indicador que no distinga mayúsculas y minúsculas en rsync. Hasta entonces, las únicas opciones parecen ser el parche o la sintaxis similar a expresión regular.

mivk
fuente
2

Puedes intentar usar el sistema de coincidencia difusa de rsync:

-y, - difuso

Esta opción le dice a rsync que debe buscar un archivo base para cualquier archivo de destino que falte. El algoritmo actual busca en el mismo directorio que el archivo de destino un archivo que tenga un tamaño y tiempo de modificación idénticos, o un archivo de nombre similar. Si se encuentra, rsync usa el archivo de base difusa para intentar acelerar la transferencia.

Tenga en cuenta que el uso de la --borrar La opción podría deshacerse de cualquier posible archivo de coincidencia difusa, por lo que puede --delete-after o especifique algunas exclusiones de nombre de archivo si necesita evitar esto.

Majenko
fuente
2

Rsync tiene lo que ellos llaman un "parche mantenido" que agrega un --ignore-case cambiar. Necesitas compilar rsync desde fuente para esto, y aplicar ignore-case.patch. Necesita la versión rsync parcheada tanto en el local como en el lado remoto.

Wim
fuente
1
¿Por qué esto no está en el código principal? ¿Por qué dejar un parche sin aplicar? GNU tar tiene --ignore-case, y puede cambiar fácilmente entre archivos de exclusión que distinguen entre mayúsculas y minúsculas y los archivos de exclusión ignorados por mayúsculas y minúsculas en la misma línea de comandos.
Brendan Byrd
Notaria que ignore-case.patch reside en el rsync-patches-x.y.z.tar.gz archivo (donde x.y.z denota el número de versión).
jjlin
1

No hay una opción específica para hacer que rsync no distinga mayúsculas de minúsculas. Aunque, NTFS conserva el caso por lo que no debería tener mucho problema con él. Por otro lado, los sistemas de archivos FAT tienen más problemas con rsync y se debe evitar esta combinación.

forcefsck
fuente