Tôi tin rằng bạn có thể sử dụng rsync
để làm điều này. Quan sát chính sẽ cần sử dụng --existing
và các --update
công tắc.
--existing skip creating new files on receiver
-u, --update skip files that are newer on the receiver
Một lệnh như thế này sẽ làm điều đó:
$ rsync -avz --update --existing src/ dst
Thí dụ
Nói rằng chúng tôi có dữ liệu mẫu sau.
$ mkdir -p src/; touch src/file{1..3}
$ mkdir -p dst/; touch dst/file{2..3}
$ touch -d 20120101 src/file2
Có vẻ như sau:
$ ls -l src/ dst/
dst/:
total 0
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file2
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file3
src/:
total 0
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file1
-rw-rw-r--. 1 saml saml 0 Jan 1 2012 file2
-rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file3
Bây giờ nếu tôi đồng bộ hóa các thư mục này thì sẽ không có gì xảy ra:
$ rsync -avz --update --existing src/ dst
sending incremental file list
sent 12 bytes received 31 bytes 406.00 bytes/sec
total size is 0 speedup is 0.00
Nếu chúng ta touch
là một tệp nguồn để nó mới hơn:
$ touch src/file3
$ ls -l src/file3
-rw-rw-r--. 1 saml saml 0 Feb 27 01:04 src/file3
Một rsync
lệnh khác của lệnh:
$ rsync -avz --update --existing src/ dst
sending incremental file list
file3
sent 115 bytes received 31 bytes 292.00 bytes/sec
total size is 0 speedup is 0.00
Chúng ta có thể thấy rằng file3
, vì nó mới hơn và nó tồn tại dst/
, nên nó được gửi đi.
Kiểm tra
Để đảm bảo mọi thứ hoạt động trước khi bạn cắt lệnh lỏng lẻo, tôi khuyên bạn nên sử dụng rsync
các công tắc khác , --dry-run
. Chúng ta hãy thêm một đầu ra -v
nữa để rsync
đầu ra dài dòng hơn.
$ rsync -avvz --dry-run --update --existing src/ dst
sending incremental file list
delta-transmission disabled for local transfer or --whole-file
file1
file2 is uptodate
file3 is newer
total: matches=0 hash_hits=0 false_alarms=0 data=0
sent 88 bytes received 21 bytes 218.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
rsync --archive --update --existing --whole-file --itemize-changes a/ b
. Hoặc hầu hết các tùy chọn không cần thiết? (Tôi đã thêm toàn bộ tệp vì đây hầu hết là các tệp văn bản nhỏ.)