Il existe plusieurs façons dont rsync compare les fichiers - la source faisant autorité est la description de l'algorithme rsync: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf . L' article de wikipedia sur rsync est également très bon.
Pour les fichiers locaux, rsync compare les métadonnées et s'il semble qu'il n'a pas besoin de copier le fichier car la taille et l'horodatage correspondent entre la source et la destination, il ne cherche pas plus loin. S'ils ne correspondent pas, cp est le fichier. Cependant, que se passe-t-il si les métadonnées correspondent mais que les fichiers ne sont pas réellement les mêmes? Ensuite, rsync n'a probablement pas fait ce que vous vouliez.
Les fichiers de même taille peuvent encore avoir changé. Un exemple simple est un fichier texte dans lequel vous corrigez une faute de frappe - comme changer "teh" en "the". La taille du fichier est la même, mais le fichier corrigé aura un horodatage plus récent. --size-only
dit "ne regardez pas l'heure; si la taille correspond, supposez que les fichiers correspondent", ce qui serait un mauvais choix dans ce cas.
D'un autre côté, supposons que vous ayez accidentellement fait un gros travail cp -r A B
hier, mais que vous ayez oublié de conserver les horodatages, et maintenant vous voulez faire l'opération en sens inverse rsync B A
. Tous ces fichiers que vous avez cpés ont l'horodatage d'hier, même s'ils n'ont pas vraiment été modifiés hier, et rsync finira par défaut par copier tous ces fichiers et par la mise à jour de l'horodatage d'hier également. --size-only
peut être votre ami dans ce cas (modulo l'exemple ci-dessus).
--ignore-times
dit de comparer les fichiers indépendamment du fait que les fichiers aient le même temps de modification. Considérez l'exemple de faute de frappe ci-dessus, mais non seulement vous avez corrigé la faute de frappe, mais vous avez utilisé touch
pour que le fichier corrigé ait le même temps de modification que le fichier d'origine - disons simplement que vous êtes sournois de cette façon. Eh bien, --ignore-times
fera une différence des fichiers même si la taille et l'heure correspondent.