Cópia Rsync apenas arquivos alterados; ignorar carimbos de hora de modificação de arquivo

5

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 opção --checksum

por Sandeep 24.05.2017 / 11:51

1 resposta

5

Extraído de rsync manpage:

Description

Rsync is a fast and extraordinarily versatile file copying tool. It can copy locally, to/from another host over any remote shell, or to/from a remote rsync daemon. It offers a large number of options that control every aspect of its behavior and permit very flexible specification of the set of files to be copied. It is famous for its delta-transfer algorithm, which reduces the amount of data sent over the network by sending only the differences between the source files and the existing files in the destination. Rsync is widely used for backups and mirroring and as an improved copy command for everyday use.

Rsync finds files that need to be transferred using a lqquick checkrq algorithm (by default) that looks for files that have changed in size or in last-modified time. Any changes in the other preserved attributes (as requested by options) are made on the destination file directly when the quick check indicates that the file's data does not need to be updated.

Assim, 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 usada para espelhamento e backups
  • algoritmo checkrq que faz o que você quer na condição 1: if len(f1) != len(f2) then rsync
  • O destino será afetado se nenhuma opção for aprovada.

Agora, é apenas uma questão de procurar opções relacionadas à soma de verificação. 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ê quer em 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 de correspondência de tamanho.

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

    
por 24.05.2017 / 12:57

Tags