Istnieje kilka sposobów porównywania plików przez rsync - autorytatywnym źródłem jest opis algorytmu rsync: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf . Artykuł wikipedii na rsync jest również bardzo dobra.
W przypadku plików lokalnych rsync porównuje metadane i jeśli wygląda na to, że nie musi kopiować pliku, ponieważ rozmiar i sygnatura czasowa są zgodne między źródłem a miejscem docelowym, nie szuka dalej. Jeśli nie pasują, jest to plik cp. A co, jeśli metadane są zgodne, ale pliki nie są w rzeczywistości takie same? Wtedy rsync prawdopodobnie nie zrobił tego, co zamierzałeś.
Pliki o tym samym rozmiarze mogły się jeszcze zmienić. Jednym prostym przykładem jest plik tekstowy, w którym poprawiamy literówkę - na przykład zmieniając „teh” na „the”. Rozmiar pliku jest taki sam, ale poprawiony plik będzie miał nowszą sygnaturę czasową. --size-onlymówi „nie patrz na czas; jeśli rozmiar pasuje, zakładaj, że pliki są zgodne”, co w tym przypadku byłoby złym wyborem.
Z drugiej strony, przypuśćmy, że cp -r A Bwczoraj przypadkowo zrobiłeś coś wielkiego , ale zapomniałeś zachować znaczniki czasu, a teraz chcesz wykonać operację w odwrotnej kolejności rsync B A. Wszystkie pliki, które utworzyłeś, mają sygnaturę czasową z wczoraj, mimo że nie zostały wczoraj tak naprawdę zmodyfikowane, a rsync domyślnie kopiuje wszystkie te pliki i aktualizuje również sygnaturę czasową do wczoraj. --size-onlymoże być twoim przyjacielem w tym przypadku (modulo powyższy przykład).
--ignore-timesmówi, aby porównać pliki niezależnie od tego, czy pliki mają ten sam czas modyfikacji. Rozważ powyższy przykład literówki, ale potem nie tylko poprawiłeś literówkę, ale także sprawiłeś, touchże poprawiony plik miał taki sam czas modyfikacji jak oryginalny plik - powiedzmy, że jesteś podstępny w ten sposób. Dobrze --ignore-timeszrobi różnicę plików, nawet jeśli rozmiar i czas pasują.