Есть несколько способов, которыми rsync сравнивает файлы - авторитетным источником является описание алгоритма rsync: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf . Википедии статья на Rsync тоже очень хорошо.
Для локальных файлов rsync сравнивает метаданные, и, если кажется, что копировать файл не нужно, поскольку размер и временная метка между источником и местом назначения совпадают, он не ищет дальше. Если они не совпадают, это файл cp. Однако что, если метаданные совпадают, но файлы на самом деле не совпадают? Тогда rsync, вероятно, не сделал того, что вы планировали.
Файлы того же размера все еще могли быть изменены. Один простой пример - текстовый файл, в котором вы исправляете опечатку - например, заменяете «teh» на «the». Размер файла такой же, но исправленный файл будет иметь более новую метку времени. --size-only
говорит: «Не смотрите на время; если размер совпадает, предполагайте, что файлы совпадают», что в данном случае было бы неправильным выбором.
С другой стороны, предположим, что cp -r A B
вчера вы случайно сделали что-то важное, но забыли сохранить временные метки, и теперь вы хотите выполнить операцию в обратном порядке rsync B A
. Все эти файлы имеют вчерашнюю метку времени, хотя на самом деле они не были изменены вчера, и rsync по умолчанию скопирует все эти файлы и обновит метку времени до вчерашнего дня. --size-only
может быть вашим другом в этом случае (по модулю приведенного выше примера).
--ignore-times
говорит о сравнении файлов независимо от того, имеют ли файлы одинаковое время изменения. Рассмотрим приведенный выше пример с опечаткой, но тогда вы не только исправили опечатку, но и использовали touch
для того, чтобы исправленный файл имел то же время изменения, что и исходный файл - давайте просто скажем, что вы подлый. Хорошо --ignore-times
проведет сравнение файлов, даже если размер и время совпадают.