rsync's manpage states:

Rsync finds files that need to be transferred using a "quick check" algorithm (by default) that looks for files that have changed in size or in last-modified time. Any changes in the other preserved attributes (as requested by options) are made on the destination file directly when the quick check indicates that the file's data does not need to be updated.

So for a file to be skipped the modification time has to be the same in source and destination. But since --times is off by default, the destination files will get the time of the sync as their modification time, causing them to be transferred over and over again.

Especially the fact that that paragraph says (emphasis mine):

... Any changes in the other preserved attributes ...

makes it appear (to me) as if the modification time was already a preserved attribute by default, but in my experiment I found otherwise.

What am I missing?

1 Answer 1


"(as requested by options)"

Yes, the word "other" in the sentence makes your interpretation possible, but I think that the actual situation is that there are no preserved attributes by default, and that these need to be explicitly requested by options.

rsync works very much like cp in this regard, which also does not preserve timestamps or ownerships on files by default. Both preserves permissions though.

  • Indeed, I cannot come up with a better default that would keep the similarity with cp.
    – AndreKR
    Jan 12, 2019 at 1:33
  • The question is if being similar to cp is the right thing to do for a program that goes to great lengths to enable a much more efficient way of doing things. My personal answer is "No, this is just sad" not only because it just bit me again.
    – stefanct
    Oct 8, 2019 at 12:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .