Можно ли заставить rsync работать при следующих условиях?
if len(f1) != len(f2) then rsync
if len(f1) == len(f2) and md5sum(f1) != md5sum(f2) then rsync
Самый близкий --checksum
вариант??
решение1
Взято из rsync
man-страницы:
Описание
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-битную контрольную сумму для каждого файла соответствующего размера.
Но будьте осторожны, так как эта опция, в зависимости от ситуации, значительно увеличит ваш ввод-вывод.