Hay varias formas en que rsync compara archivos: la fuente autorizada es la descripción del algoritmo rsync: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf . El artículo de wikipedia sobre rsync también es muy bueno.
Para los archivos locales, rsync compara metadatos y, si parece que no necesita copiar el archivo porque el tamaño y la marca de tiempo coinciden entre el origen y el destino, no busca más. Si no coinciden, es cp el archivo. Sin embargo, ¿qué sucede si los metadatos coinciden pero los archivos no son realmente iguales? Entonces, rsync probablemente no hizo lo que pretendías.
Es posible que los archivos del mismo tamaño hayan cambiado. Un ejemplo sencillo es un archivo de texto en el que se corrige un error tipográfico, como cambiar "teh" por "the". El tamaño del archivo es el mismo, pero el archivo corregido tendrá una marca de tiempo más reciente. --size-only
dice "no mire la hora; si el tamaño coincide, suponga que los archivos coinciden", lo que sería una elección incorrecta en este caso.
Por otro lado, suponga que accidentalmente hizo un gran cp -r A B
ayer, pero olvidó conservar las marcas de tiempo y ahora desea realizar la operación a la inversa rsync B A
. Todos esos archivos que cp'ed tienen la marca de tiempo de ayer, a pesar de que en realidad no fueron modificados ayer, y rsync terminará por defecto copiando todos esos archivos y actualizando la marca de tiempo a ayer también. --size-only
puede ser su amigo en este caso (módulo el ejemplo anterior).
--ignore-times
dice comparar los archivos independientemente de si los archivos tienen el mismo tiempo de modificación. Considere el ejemplo de error tipográfico anterior, pero no solo corrigió el error tipográfico, sino que solía touch
hacer que el archivo corregido tenga el mismo tiempo de modificación que el archivo original; digamos que es astuto de esa manera. Bueno --ignore-times
, hará una diferencia de los archivos aunque el tamaño y el tiempo coincidan.