Rsync копирует только измененные файлы; игнорирует временные метки изменения файлов

Rsync копирует только измененные файлы; игнорирует временные метки изменения файлов

Можно ли заставить rsync работать при следующих условиях?

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

Самый близкий --checksumвариант??


решение1

Взято из rsyncman-страницы:

Описание

Rsync — быстрый и необычайно универсальный инструмент копирования файлов. Он может копировать локально, на другой хост или с другого хоста через любую удаленную оболочку или на удаленный демон rsync или с него. Он предлагает большое количество опций, которые контролируют каждый аспект его поведения и позволяют очень гибко определять набор копируемых файлов. Он известен своим алгоритмом дельта-передачи, который уменьшает объем данных, отправляемых по сети, отправляя только различия между исходными файлами и существующими файлами в месте назначения. Rsync широко используется для резервного копирования и зеркалирования, а также в качестве улучшенной команды копирования для повседневного использования.

Rsync находит файлы, которые необходимо передать, используя алгоритм lqquick checkrq (по умолчанию), которыйищет файлы, размер или время последнего изменения которых изменились.Любые изменения в других сохраненных атрибутах (согласно запросу параметров) вносятся непосредственно в целевой файл, когда быстрая проверка показывает, что данные файла не требуют обновления.

Итак, поведение по умолчанию, как мы видим в описании, следующее:

  • Инструмент копирования, работающий локально или удаленно
  • Множество вариантов
  • Алгоритм дельта-передачи по умолчанию, который передает только наборы файлов, которые отличаются, что снижает объем использования сети
  • Широко используемый инструмент для зеркалирования и резервного копирования.
  • Алгоритм checkrq, который делает то, что вам нужно, при условии 1: if len(f1) != len(f2) then rsync
  • Если не передано ни одного варианта, то затронутым оказывается пункт назначения.

Теперь осталось только поискать опции, связанные с контрольной суммой. Поиск в руководствах:

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

Описание --checksumименно то, что вам нужно if len(f1) == len(f2) and md5sum(f1) != md5sum(f2) then rsync. Он сделает 128-битную контрольную сумму для каждого файла соответствующего размера.

Но будьте осторожны, так как эта опция, в зависимости от ситуации, значительно увеличит ваш ввод-вывод.

Связанный контент