Когда я делаю rsync --dry-run -rv
, rsync выводит список файлов, которые идентичны, за исключением их временных меток.
Я понял, что только с этими флагами (которые на самом деле не меняют поведение сравнения), rsync будет видеть разные временные метки, проверять размеры файлов (которые, конечно же, одинаковы), а затем, наконец, вычислять контрольную сумму для файлы, прежде чем помечать их для обновления. Если контрольные суммы совпадают, даже если отметки времени разные, файл не будет обновлен.
Что я не понимаю?
Похоже, вы все прекрасно понимаете, за одним исключением. Когда ты в --dry-run
режим rsync не вычисляет контрольные суммы, поэтому вы можете увидеть файлы, которые не будут переданы после того, как контрольная сумма будет выполнена.
Поскольку метка времени отличается, rsync знает, что она будет обновлена, но поскольку она находится в режиме пробного запуска, она не сможет сообщить, что единственное, что нужно обновить, - это метка времени.
Я использую его для отслеживания сбоев синхронизации между удаленными машинами ... так что на самом деле это просто удаленная разница.
Я не знаю, как заставить контрольную сумму в режиме пробного прогона.
Поскольку похоже, что вы пытаетесь принудительно сравнить локальный и удаленный набор синхронизированных файлов, вы можете попробовать вместо этого что-то подобное? (sha256deep можно заменить на sha1 или md5 deep, если вам нужно больше скорости).
diff -u <( /usr/bin/sha256deep -l -z -r -o f path | sort -k 3 ) \
<( ssh remote /usr/bin/sha256deep -l -z -r -o f path | sort -k 3 )`
Эта команда будет вычислять контрольную сумму md5 для каждого файла как локально, так и удаленно. Два списка отсортированы по пути, и diff покажет вам разницу в контрольных суммах.