2011-08-23 37 views
15

Tôi đang cố gắng để viết một kịch bản Python mà sẽ theo dõi một chuyển rsync, và cung cấp một (thô) ước tính của sự tiến bộ phần trăm. Đối với nỗ lực đầu tiên của tôi, tôi nhìn vào một lệnh rsync --progress và thấy rằng nó in thông điệp như:Giám sát

1614 100% 1.54MB/s 0:00:00 (xfer#5, to-check=4/10)

Tôi đã viết một phân tích cú pháp cho các tin nhắn như vậy, và sử dụng một phần để kiểm tra để tạo ra một tiến trình phần trăm, ở đây, điều này sẽ hoàn thành 60%.

Tuy nhiên, có hai lỗ hổng trong việc này:

  • Trong chuyển lớn, "tử số" của phân số để kiểm tra dường như không đơn điệu giảm, vì vậy tính đầy đủ tỷ lệ phần trăm có thể nhảy về phía sau.
  • Tin nhắn như vậy không được in cho tất cả các tệp, có nghĩa là tiến trình có thể chuyển tiếp.

Tôi đã xem xét các lựa chọn thay thế khác của tin nhắn để sử dụng, nhưng chưa quản lý để tìm bất kỳ thứ gì. Có ai có ý tưởng nào?

Cảm ơn trước!

+3

Các giá trị nhảy vì rsync bắt đầu truyền dữ liệu trong khi vẫn đang đánh giá công việc mà nó phải làm. Đó là một biện pháp tốt như bất kỳ bạn sẽ nhận được. – hop

+0

Không có cách nào để đánh giá trước công việc cần làm? --dry-run --stats dường như là loại điều để làm điều này, tiếc là các giá trị nó tạo ra cho dữ liệu được chuyển giao là không chính xác. – paulmdavies

+0

tại sao bạn làm chậm nó xuống, chỉ để làm cho nó hiển thị thông tin vô ích? – hop

Trả lời

0

Đối với toàn quyền kiểm soát việc chuyển giao, bạn nên sử dụng một công cụ diff ở mức độ thấp hơn và quản lý danh sách thư mục và dữ liệu chuyển khoản cho mình.

Dựa trên librsync có một trong hai dòng lệnh rdiff hoặc các mô-đun python pysync

24

Phiên bản hiện tại của rsync (tại thời điểm chỉnh sửa 3.1.2) có một tùy chọn --info=progress2 mà sẽ cho bạn thấy sự tiến bộ của toàn bộ chuyển thay vì tệp riêng lẻ.

Từ the man page:

Ngoài ra còn có một --info = progress2 tùy chọn mà kết quả đầu ra thống kê dựa trên toàn bộ chuyển, chứ không phải là tập tin cá nhân. Sử dụng cờ này mà không cần xuất tên tệp (ví dụ: tránh v hoặc chỉ định --info = name0 nếu bạn muốn xem cách truyền tải đang hoạt động mà không cần cuộn màn hình với nhiều tên. (Bạn không cần phải chỉ định - lựa chọn tiến bộ để sử dụng --info = progress2.)

Vì vậy, nếu có thể trên hệ thống của bạn, bạn có thể nâng cấp rsync để một phiên bản hiện tại, trong đó có tùy chọn đó.

+0

Điều rất tốt để nghe! Cảm ơn bạn! – Avio

+0

Nếu tôi chỉ có thể biên dịch rsync trên MinGW:/ – msiemens

+0

sao lưu gia tăng không hiển thị thanh tiến trình chính xác – LOKESH

6

bạn có thể vô hiệu hóa các đệ quy gia tăng với các đối số --no-inc-recursive. rsync sẽ thực hiện quét trước toàn bộ cấu trúc thư mục, do đó, nó biết tổng số tệp cần kiểm tra. 10 Đây thực sự là cách cũ nó đệ quy. Gia tăng đệ quy, mặc định hiện tại, đã được thêm vào cho tốc độ.

4

Note caveat đây mà ngay cả --info=progress2không hoàn toàn đáng tin cậy vì đây là tỷ lệ phần trăm dựa trên số lượng các tập tin rsync biết về tại thời điểm tiến bộ đang được hiển thị. Điều này không nhất thiết phải là tổng số tệp cần được đồng bộ hóa (ví dụ, nếu nó phát hiện ra một số lượng lớn tệp lớn trong một thư mục lồng nhau sâu).

Một cách để đảm bảo rằng --info=progress2 không nhảy trở lại trong dấu hiệu cho thấy sự tiến bộ sẽ là để buộc rsync để quét tất cả các thư mục đệ quy trước khi bắt đầu đồng bộ hóa (thay vì hành vi mặc định của nó làm một quét từng bước đệ quy), bằng cách cung cấp tùy chọn --no-inc-recursive. Tuy nhiên, lưu ý rằng tùy chọn này cũng sẽ làm tăng việc sử dụng bộ nhớ rsync và thời gian chạy.

+0

công trình này tuyệt vời cho tôi, cảm ơn giải thích về tùy chọn –