rsync - chỉ báo cáo các tệp đã tải lên


14

Tôi gặp vấn đề với rsync: nó hiển thị cho tôi tất cả các tệp trong thư mục tôi đang rsyncing (nếu sử dụng cờ -v) hoặc không có gì cả (khi không sử dụng -v).

Tôi muốn có rsync yên tĩnh ngoại trừ các tệp thực sự phải được tải lên đến tận cùng. Có một lá cờ để kích hoạt loại báo cáo này? Tôi không thể tìm thấy điều này trong tài liệu

Câu trả lời:


11

Vâng, kiểm tra -icờ. Nó đưa ra một báo cáo về mọi hoạt động trong một định dạng khó hiểu. Xem trang hướng dẫn để biết định nghĩa chính xác của định dạng.

Để có được danh sách các tệp được gửi đến máy chủ từ xa, bạn có thể sử dụng như sau:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
Đây là báo cáo lại tất cả các tập tin, không phải những người thay đổi.
dangonfast

@gonvaled Không, chỉ các tệp được gửi đến máy chủ từ xa mới được xuất ra (vì <fcstpoguax filename, trong đó các cờ khác nhau hiển thị lý do tại sao chúng cần được cập nhật). Nếu nó báo cáo tất cả các tệp, có thể có lỗi với bài kiểm tra của bạn hoặc môi trường của bạn.
Oliver

Tôi nghĩ bạn đúng. Tôi đã xem qua trang này và nó được mô tả như bạn nói. Nhưng hệ thống của tôi đang báo cáo tất cả các tập tin. Có lẽ có gì đó không ổn với trò chơi cuối cùng ...
dangonfast

Ừm. tiến gần hơn: chuỗi báo cáo là (cho tất cả các tệp) <f..T....... Theo trang web, điều này có liên quan đến dấu thời gian.
dangonfast

1
sử dụng grep -E '^[^.]|^$'cũng sẽ cho phép thống kê (hoặc cảnh báo, lỗi, ...) dòng qua, chỉ loại bỏ các dây chuyền thực sự nhàm chán bắt đầu với một dấu chấm ...
Frank Nocke

9

rsync với một -vtập tin thực sự chỉ in các tập tin được chuyển. Nếu bạn đang nhận được danh sách đầy đủ mỗi lần thì có lẽ điều đó có nghĩa là thuật toán so sánh rsync src / mệnh mặc định, dựa trên thời gian sửa đổi + kích thước, không phù hợp với trường hợp của bạn. Bạn có thể thêm cờ -c( --checksum) làm cho rsync so sánh các tệp bằng cách kiểm tra. Lưu ý rằng điều này rõ ràng phát sinh một số chi phí I / O.

Liên quan một chút là thực tế là nếu bạn sử dụng --info=flistthay vì -vsau đó bạn sẽ có được đầu ra của các tệp được cắt xén nhiều hơn (về cơ bản bạn bỏ qua phần đầu trang và chân trang của -vđầu ra thông thường ).


1
--info=flistchỉ khả dụng trong rsync> = 3.1, không có sẵn ở mọi nơi. Ví dụ, macOS được phân phối với phiên bản cũ 2.6.9 vì Rsync v3 là unter GPL 3.
chiborg

1
Mặc dù tin đồn về GPL của Apple cực kỳ hấp dẫn, nhưng cũng nên nhớ rằng Enterprise Linux có phạm vi hỗ trợ lớn (14 năm) trong đó các phiên bản bị khóa (và phân nhánh) để duy trì chứng nhận và đảm bảo tính tương thích (api + abi) trong thời gian phát hành được hỗ trợ . Đây thực sự là cách khả thi duy nhất để thực hiện điều đó và tác dụng phụ là số phiên bản xuất hiện các tính năng cũ và mới không ảnh hưởng đến Doanh nghiệp trong thời gian dài.
dùng2066657

2

một điều xuất hiện trong đầu tôi là sử dụng định dạng nhật ký dài dòng hơn và nhận ra những gì bạn muốn nhận.

ví dụ:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

điều này không mạnh lắm, nó sẽ không xử lý tốt tên tệp có dấu cách.


1

1. Sử dụng -itùy chọn

Đối với những cờ thay đổi được biểu tượng hóa (hoặc: khó hiểu). Đầu ra của bạn sẽ trông như thế này:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. grep mỗi dòng bắt đầu bằng một dấu chấm.

Để tất cả các dòng khác (cũng là dòng trống, cho mức độ dễ đọc) vượt qua:

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

Và đây là :-) - Đúng như những gì bác sĩ đã yêu cầu:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

Tránh các dấu chấm thay vì săn lùng > cũng có lợi cho việc thống kê, nhưng cũng có thể có các lỗi, cảnh báo, v.v.

Có số liệu thống kê ở cuối là một sở thích cá nhân. Đừng sử dụng -h --statsnếu bạn không thích những thứ này. Tôi cho rằng mối quan tâm chính của bạn là không thấy hàng trăm hoặc hàng nghìn tệp không thay đổi cuộn qua ...


0

Tôi không nghĩ có một lá cờ để làm điều này nhưng có thể có ngay bây giờ. Đây là cách tôi đã làm:

rsync -vv [other options] | grep -v 'uptodate'

1
Rsync của tôi (phiên bản 3.0.7) không thêm uptodatevào báo cáo, vì vậy không thể lọc ra.
dangonfast

Tôi muốn sửa, hoặc ít nhất là làm rõ, những gì Mike đã đăng ở trên và những gì @ jeckyll2 leather đã chỉ ra. Tôi nghĩ vấn đề không phải là rsync -v không còn phát ra chuỗi "nâng cấp" mà là bạn cần sử dụng rsync -vv. Lưu ý hai so với tôi vừa xác minh điều này hoạt động trên Ubuntu 14.04 với phiên bản rsync 3.1.0. Mike, bạn có thể cập nhật bài viết của bạn để phản ánh điều này?
John Mark Mitchell
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.