A cópia do Rsync apenas alterou os arquivos; ignorar carimbos de data/hora de modificação de arquivo

A cópia do Rsync apenas alterou os arquivos; ignorar carimbos de data/hora de modificação de arquivo

Posso fazer o rsync funcionar nas seguintes condições?

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

O mais próximo é a --checksumopção??


Responder1

Retirado da rsyncpágina de manual:

Descrição

Rsync é uma ferramenta de cópia de arquivos rápida e extraordinariamente versátil. Ele pode copiar localmente, de/para outro host através de qualquer shell remoto ou de/para um daemon rsync remoto. Oferece um grande número de opções que controlam todos os aspectos do seu comportamento e permitem uma especificação muito flexível do conjunto de arquivos a serem copiados. É famoso por seu algoritmo de transferência delta, que reduz a quantidade de dados enviados pela rede enviando apenas as diferenças entre os arquivos de origem e os arquivos existentes no destino. Rsync é amplamente usado para backups e espelhamento e como um comando de cópia aprimorado para uso diário.

O Rsync encontra arquivos que precisam ser transferidos usando um algoritmo lqquick checkrq (por padrão) queprocura arquivos que mudaram de tamanho ou na hora da última modificação.Quaisquer alterações nos outros atributos preservados (conforme solicitado pelas opções) são feitas diretamente no arquivo de destino quando a verificação rápida indica que os dados do arquivo não precisam ser atualizados.

Portanto, o comportamento padrão como podemos ver na descrição é:

  • Ferramenta de cópia, que funciona local ou remotamente
  • Muitas opções
  • Algoritmo de transferência delta por padrão, que transferirá apenas conjuntos de arquivos diferentes para reduzir a quantidade de uso da rede
  • Ferramenta amplamente utilizada para espelhamento e backups
  • Algoritmo checkrq que faz o que você deseja na condição 1: if len(f1) != len(f2) then rsync
  • O destino será afetado se nenhuma opção for passada.

Agora é só procurar opções relacionadas ao checksum. Pesquisando nos manuais:

-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.

A descrição de --checksumé exatamente o que você deseja if len(f1) == len(f2) and md5sum(f1) != md5sum(f2) then rsync. Ele fará uma soma de verificação de 128 bits em cada arquivo correspondente ao tamanho.

Mas tenha cuidado porque esta opção irá, dependendo da situação, aumentar significativamente sua E/S.

informação relacionada