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-only
mó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 B
wczoraj 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-only
może być twoim przyjacielem w tym przypadku (modulo powyższy przykład).
--ignore-times
mó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-times
zrobi różnicę plików, nawet jeśli rozmiar i czas pasują.