Es gibt verschiedene Möglichkeiten, wie rsync Dateien vergleicht - die maßgebliche Quelle ist die Beschreibung des rsync-Algorithmus: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf . Der Wikipedia-Artikel über rsync ist auch sehr gut.
Bei lokalen Dateien vergleicht rsync Metadaten. Wenn es so aussieht, als müsste die Datei nicht kopiert werden, da Größe und Zeitstempel zwischen Quelle und Ziel übereinstimmen, wird nicht weiter gesucht. Wenn sie nicht übereinstimmen, ist es die Datei. Was ist jedoch, wenn die Metadaten übereinstimmen, die Dateien jedoch nicht identisch sind? Dann hat rsync wahrscheinlich nicht das getan, was Sie beabsichtigt haben.
Dateien mit derselben Größe haben sich möglicherweise noch geändert. Ein einfaches Beispiel ist eine Textdatei, in der Sie einen Tippfehler korrigieren - wie das Ändern von "teh" in "the". Die Dateigröße ist gleich, aber die korrigierte Datei hat einen neueren Zeitstempel. --size-only
sagt "Schau nicht auf die Zeit; wenn die Größe übereinstimmt, gehe davon aus, dass die Dateien übereinstimmen", was in diesem Fall die falsche Wahl wäre.
Nehmen wir andererseits an, Sie haben cp -r A B
gestern versehentlich einen großen Fehler gemacht, aber Sie haben vergessen, die Zeitstempel beizubehalten, und jetzt möchten Sie den Vorgang in umgekehrter Reihenfolge ausführen rsync B A
. Alle Dateien, die Sie erstellt haben, haben den gestrigen Zeitstempel, obwohl sie gestern nicht wirklich geändert wurden, und rsync kopiert standardmäßig alle diese Dateien und aktualisiert den Zeitstempel auch auf gestern. --size-only
kann in diesem Fall dein Freund sein (modulo das obige Beispiel).
--ignore-times
sagt, die Dateien zu vergleichen, unabhängig davon, ob die Dateien die gleiche Änderungszeit haben. Betrachten Sie das obige Tippfehlerbeispiel, aber Sie haben dann nicht nur den Tippfehler touch
korrigiert , sondern auch dafür gesorgt , dass die korrigierte Datei dieselbe Änderungszeit wie die Originaldatei hat. Nehmen wir einfach an, Sie sind auf diese Weise hinterhältig. Nun --ignore-times
wird ein Unterschied der Dateien gemacht , obwohl die Größe und Zeit übereinstimmen.