Cách rsync chỉ các tệp mới


144

Tôi đang cố gắng thiết lập rsync để đồng bộ hóa máy chủ web chính của mình với máy chủ từ xa bằng cách thêm tệp mới được tạo vào sau này.

Đây là lệnh mà tôi sử dụng:

rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar

Nhưng có vẻ như máy chủ web thực sự chuyển tất cả các tệp bất chấp cờ '--update'. Tôi đã thử các kết hợp cờ khác nhau (ví dụ: bỏ qua '-a' và sử dụng '-uv') nhưng không được giúp đỡ. Vì vậy, tự hỏi làm thế nào tôi có thể sửa đổi lệnh rsync để chỉ gửi các tệp mới được thêm vào. Cảm ơn


2
Nếu bạn muốn đồng bộ hóa các tập tin với máy chủ từ xa, không nên đến lần cuối? tức là rsync /foo/bar remoteuser@remotehost:/foo/bar
Ostrokach

Bạn có thể quan tâm bởi trang web này . Ngoài ra, hãy cẩn thận với hệ thống tập tin. Nếu hệ thống tập tin của máy chủ không hỗ trợ tất cả -atùy chọn đó ngụ ý (chủ sở hữu, nhóm, perms, ...) thì đó sẽ là nguyên nhân của vấn đề của chúng tôi.
ppr

2
Không có câu trả lời nào giải quyết được vấn đề trong đó các tệp cục bộ không được sao chép hoàn toàn vào đích từ xa và bạn chỉ muốn rsync các tệp mới hơn.
Axel Bregnsbo

Tôi chỉ tìm thấy -ctùy chọn. Nó bỏ qua các tệp hiện có dựa trên tổng kiểm tra, thay vì thời gian hoặc kích thước sửa đổi.
haheute

Câu trả lời:


181

Từ man rsync:

--ignore-existing       skip updating files that exist on receiver

--updatelàm một cái gì đó hơi khác nhau, đó có thể là lý do tại sao bạn nhận được kết quả bất ngờ (xem man rsync):

Điều này buộc rsync bỏ qua bất kỳ tệp nào tồn tại trên đích và có thời gian sửa đổi mới hơn tệp nguồn . (Nếu một tệp đích hiện có thời gian sửa đổi bằng với tệp nguồn, nó sẽ được cập nhật nếu kích thước khác nhau.)


1
Thực ra tôi đã thử lệnh với '--ignore-tồn tại' thay vì '--update'. Nó kết thúc nhanh nhưng không đưa các tệp mới vào máy chủ từ xa. Có ý kiến ​​gì không? Cảm ơn
siêu thị

13
Các trang man hút (đúng là tôi đã đến đó), trong trường hợp, có --ignore-existingnghĩa là không chuyển các tệp tồn tại trên máy thu hoặc không chuyển các tệp nếu một số tệp / thư mục có cùng tên tồn tại trên máy thu?
puk

7
--update không bỏ qua các tệp khi mtimes giống hệt nhau (đó không phải là những gì từ ngữ ngụ ý). Tôi đã thử nghiệm điều này. Tôi tin rằng từ ngữ sẽ được hiểu rõ hơn nếu nó nói "chỉ các tệp nguồn mới hơn đích sẽ được sao chép".
Bạch tuộc

4
@Octopus "chỉ các tệp nguồn mới hơn đích sẽ được sao chép" ... hoặc các tệp nguồn có cùng thời gian sửa đổi với các tệp đích của chúng, nhưng có kích thước khác nhau . Tôi nghĩ đó là một điểm quan trọng. (Chris đã đề cập đến điều đó, cảm ơn)
Jonathan Komar

Vì vậy, bạn cần --ignore-tồn tại và -r (đệ quy). -v (verbose) cũng rất vui khi có :-)
DutchUncle

40

Trong trường hợp của tôi, tôi gặp vấn đề tương tự, có tất cả các tệp được chuyển thay vì chỉ các tệp được sửa đổi / mới. Tôi đã giải quyết điều này bằng cách sử dụng các tham số -t(thay vì -a) và -P(tương đương --partial --progress):

rsync -h -v -r -P -t mục tiêu nguồn

Điều này chỉ chuyển các tệp mới và các tệp đã tồn tại nhưng đã được sửa đổi: -aquá nhiều, như đồng bộ hóa ID người dùng và nhóm, trong trường hợp của tôi không thể hoạt động vì tôi có các nhóm và người dùng khác nhau trên các hệ thống nguồn và đích của mình.

Các thông số chi tiết:

  • -h: số người có thể đọc được
  • -v: dài dòng
  • -r: recurse vào thư mục
  • -P: --partial(giữ các tệp được chuyển một phần) +
            --progress(hiển thị tiến trình trong khi chuyển)
  • -t: bảo toàn thời gian sửa đổi

2
+1 cho '-a làm quá nhiều' (thực sự -rlptgoD, vì vậy, không được phép làm phẳng, các nhóm và chủ sở hữu đã lưu giữ chú thích Sao lưu an toàn chơi điển hình của tôi ...)
Frank Nocke

2

Từ kinh nghiệm của tôi với rsync, sao chép phân vùng 1TB là quá lớn để có hiệu quả. Phải mất rsync mãi mãi để xử lý nó. Thay vào đó, làm điều đó bằng thư mục con. Đó là, chạy rsync cho mỗi thư mục con chính. Nó sẽ nhanh hơn rất nhiều nếu nó không phải xử lý hàng chục ngàn tệp.


1
Có lẽ bạn đã hết bộ nhớ và hệ thống của bạn bắt đầu hoán đổi?
Marcel Burkhard

-2

Thử

rsync -zvrt --update SOURCE DESTN

8
Một chút giải thích cho lệnh trên sẽ được đánh giá cao cho OP.
Peschke

từ trang man `-u, --update bỏ qua các tệp mới hơn trên máy
thu`
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.