Có một số cách rsync so sánh các tệp - nguồn có thẩm quyền là mô tả thuật toán rsync: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf . Các bài viết wikipedia trên rsync cũng rất tốt.
Đối với các tệp cục bộ, rsync so sánh siêu dữ liệu và nếu có vẻ như nó không cần sao chép tệp vì kích thước và dấu thời gian khớp giữa nguồn và đích thì nó không nhìn xa hơn. Nếu chúng không khớp, thì cp là tệp. Tuy nhiên, điều gì sẽ xảy ra nếu siêu dữ liệu khớp nhưng các tệp không thực sự giống nhau? Sau đó, rsync có thể đã không làm những gì bạn dự định.
Các tệp có cùng kích thước vẫn có thể đã thay đổi. Một ví dụ đơn giản là tệp văn bản nơi bạn sửa lỗi chính tả - như thay đổi "teh" thành "the". Kích thước tệp giống nhau, nhưng tệp đã sửa sẽ có dấu thời gian mới hơn. --size-only
nói "không nhìn vào thời gian; nếu kích thước phù hợp, giả sử các tệp phù hợp", đó sẽ là lựa chọn sai trong trường hợp này.
Mặt khác, giả sử bạn vô tình làm một việc lớn cp -r A B
ngày hôm qua, nhưng bạn quên bảo quản các dấu thời gian, và bây giờ bạn muốn thực hiện thao tác ngược lại rsync B A
. Tất cả các tệp bạn đã tạo đều có dấu thời gian của ngày hôm qua, mặc dù chúng không thực sự được sửa đổi vào ngày hôm qua và theo mặc định, rsync sẽ kết thúc việc sao chép tất cả các tệp đó và cập nhật dấu thời gian cho ngày hôm qua. --size-only
có thể là bạn của bạn trong trường hợp này (mô-đun ví dụ ở trên).
--ignore-times
nói để so sánh các tệp bất kể các tệp có cùng thời gian sửa đổi hay không. Hãy xem xét ví dụ về lỗi đánh máy ở trên, nhưng sau đó bạn không chỉ sửa lỗi chính tả mà còn touch
làm cho tệp đã sửa có cùng thời gian sửa đổi với tệp gốc - giả sử bạn đang lén lút theo cách đó. Vâng --ignore-times
sẽ làm một diff của các tập tin mặc dù kích thước và thời gian trận đấu.