Прежде чем копировать, rsync решает, какие файлы отличаются. От способа сравнения зависит, заметит ли он подмену.
rsync приводит назначение к источнику: первым в команде идёт источник, вторым — назначение. Ключ -a копирует каталоги целиком и переносит права и время изменения, а если хватает полномочий — и владельца.
Перед копированием rsync сравнивает каждую пару файлов. По умолчанию это быстрая проверка: размер и время изменения. Совпали оба — файл считается одинаковым, и его содержимое rsync даже не читает. Поэтому повторная синхронизация большого дерева идёт быстро.
У двух settings.conf строки mode=stable и mode=broken одной длины, а время изменения им выставили одинаковое. Для быстрой проверки это один и тот же файл. Так бывает, когда время файлу задают вручную через touch -d или переносят из архива: tar возвращает файлам время, записанное в архиве.
Ключ -c сравнивает контрольные суммы содержимого: rsync читает каждый файл с обеих сторон целиком. Различие он найдёт, но на большом дереве это долго. Поэтому -c берут, когда есть повод не доверять размеру и времени.
В ls -l у app.conf в источнике и в копии одинаковые размер и время, а cat печатает разные строки. Что сделает rsync -a src/ copy/?
-
Без
-crsync сравнивает размер и время, а они совпадают: файл он пропустит. Заменит егоrsync -ac src/ copy/. -
Без
-cразное содержимое rsync не замечает: команда завершится молча, как в начале урока. -
rsync не задаёт вопросов: что копировать, он решает сам — по размеру и времени изменения.
Без -c rsync сравнивает только размер и время изменения, а они совпадают. Сравнить содержимое и заменить файл поможет rsync -ac src/ copy/.
Главное в шаге
-
Без
-crsync сравнивает только размер и время изменения: если они совпали, файл не копируется. -
-cсравнивает содержимое по контрольной сумме и читает все файлы, поэтому на больших деревьях работает дольше.