Існує кілька способів порівняння файлів 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
. Усі ці файли, які ви cp'ed, мають вчорашню позначку часу, хоча вони вчора не були дійсно змінені, і rsync за замовчуванням закінчить копіювання всіх цих файлів та оновлення часової позначки до вчорашнього. --size-only
може бути вашим другом у цьому випадку (модуль на прикладі вище).
--ignore-times
каже порівняти файли незалежно від того, чи мають файли однаковий час зміни. Розгляньте приклад друку вище, але тоді ви не тільки виправили помилку друку, але й використовували touch
для того, щоб виправлений файл мав такий самий час зміни, що і вихідний файл, скажімо, що ви проникли таким чином. Добре --ignore-times
буде робити різні файли, навіть якщо розмір і час відповідають.