La copia de Rsync solo cambia los archivos; ignorar las marcas de tiempo de modificación de archivos

La copia de Rsync solo cambia los archivos; ignorar las marcas de tiempo de modificación de archivos

¿Puedo hacer que rsync funcione en las siguientes condiciones?

if len(f1) != len(f2) then rsync
if len(f1) == len(f2) and md5sum(f1) != md5sum(f2) then rsync

¿La --checksumopción más cercana es?


Respuesta1

Tomado de rsyncla página de manual:

Descripción

Rsync es una herramienta de copia de archivos rápida y extraordinariamente versátil. Puede copiar localmente, hacia/desde otro host a través de cualquier shell remoto, o hacia/desde un demonio rsync remoto. Ofrece una gran cantidad de opciones que controlan todos los aspectos de su comportamiento y permiten una especificación muy flexible del conjunto de archivos a copiar. Es famoso por su algoritmo de transferencia delta, que reduce la cantidad de datos enviados a través de la red enviando sólo las diferencias entre los archivos de origen y los archivos existentes en el destino. Rsync se usa ampliamente para copias de seguridad y duplicación y como un comando de copia mejorado para el uso diario.

Rsync encuentra archivos que deben transferirse utilizando un algoritmo lqquick checkrq (por defecto) quebusca archivos que han cambiado de tamaño o en la hora de la última modificación.Cualquier cambio en los demás atributos conservados (según lo solicitado por las opciones) se realiza directamente en el archivo de destino cuando la verificación rápida indica que no es necesario actualizar los datos del archivo.

Entonces, el comportamiento predeterminado como podemos ver en la descripción es:

  • Herramienta de copia, que funciona de forma local o remota
  • Muchas opciones
  • Algoritmo de transferencia delta de forma predeterminada, que solo transferirá conjuntos de archivos que difieren para reducir la cantidad de uso de la red.
  • Herramienta ampliamente utilizada para duplicación y copias de seguridad.
  • Algoritmo checkrq que hace lo que quieres en la condición 1: if len(f1) != len(f2) then rsync
  • El destino es el que se verá afectado si no se pasan opciones.

Ahora solo es cuestión de buscar opciones relacionadas con la suma de comprobación. Buscando en los manuales:

-c, --checksum
   This changes the way rsync checks if the files have been changed and are in
   need of a transfer. Without this option, rsync uses a lqquick checkrq that
   (by default) checks if each file's size and time of last modification match
   between the sender and receiver. This option changes this to compare a 128-
   bit checksum for each file that has a matching size. Generating the checksums
   means that both sides will expend a lot of disk I/O reading all the data in
   the files in the transfer (and this is prior to any reading that will be
   done to transfer changed files), so this can slow things down significantly.

La descripción de --checksumes exactamente lo que desea if len(f1) == len(f2) and md5sum(f1) != md5sum(f2) then rsync. Realizará una suma de comprobación de 128 bits en cada archivo que coincida con el tamaño.

Pero tenga cuidado porque esta opción, dependiendo de la situación, aumentará significativamente su E/S.

información relacionada