Sử dụng lại đầu ra rsync --dry-run để tăng tốc độ chuyển thực tế sau này


23

Tôi thường làm rsync -ntrước khi làm một thực tế rsync. Vấn đề là, làm thế nào tôi có thể tự động hóa lần chạy thứ hai để sử dụng lại chính xác danh sách được tạo bằng --dry-run?

Ý tôi là, nếu tôi chạy rsync -nthì tôi nhận được một mô phỏng về những gì rsyncsẽ làm, ý tưởng của tôi là lấy đầu ra đó, xử lý nó bằng cách nào đó rsyncchỉ tạo --include-fromra đầu ra đó, vì vậy danh sách đầy đủ chỉ được tính một lần.

Nếu điều này thậm chí không có ý nghĩa, xin vui lòng, cho tôi biết.

Nhân tiện, tôi có xu hướng sử dụng rsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE". Nếu bạn cũng có một gợi ý về những lựa chọn bạn sẽ sử dụng, xin vui lòng, cho tôi biết. Tôi đang cố gắng sao chép nội dung của ổ cứng ngoài (chỉ chứa hình ảnh, video và tài liệu) sang ổ cứng ngoài khác.


Bạn có thể thử chuyển hướng đầu ra từ --dry-runlệnh vào một tệp (ví dụ rsync --dry-run -avz SOURCE DEST > include.txt:), loại bỏ tất cả các dòng không phải là tệp / đường dẫn khỏi tệp bao gồm và chạy rsync --include-from include.txt.
ThatGuy

Đó là lệnh cuối cùng nên được rsync --include-from include.txt --exclude=* SOURCE DEST. Xem stackoverflow.com/a/19296415/1765910 để biết chi tiết.
ThatGuy

Vâng, đó là ý tưởng, nhưng tôi không biết làm thế nào để thực sự làm điều đó (cộng với tôi muốn sự chấp thuận từ một người thực sự biết những gì anh ấy đang làm). Tôi chỉ sử dụng rsyncnhưng không biết gì từ shell script / bash
Manuel

Câu trả lời:


18

Chắc chắn có thể sử dụng danh sách tệp được tạo trong thời gian chạy dưới dạng tệp bao gồm. Tuy nhiên, lý tưởng nhất là xóa các dòng phụ ở đầu và cuối của đầu ra chạy khô.

Ví dụ đầu ra:

sending incremental file list
[LIST OF FILES]

sent 226 bytes  received 34 bytes  520.00 bytes/sec
total size is 648,373,274  speedup is 2,493,743.36 (DRY RUN)

Để loại bỏ các dòng này, đường ống rsyncđầu ra vào headvà vào tail. Sau đó, lưu đầu ra được xử lý vào một tệp bao gồm:

rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txt

Cuối cùng, yêu rsynccầu sử dụng tệp bao gồm được tạo (thêm tùy chọn bổ sung như mong muốn):

rsync --include-from=include.txt --exclude=* source/ dest/


Vấn đề với điều này là nó không đối phó với các tệp nên bị xóa. Và là phương pháp tail/ headđủ mạnh mẽ để đảm bảo chỉ có danh sách các tập tin?
Manuel

Thêm các --deletenguyên nhân khiến các tệp bị xóa khỏi các thư mục nguồn cũng bị xóa khỏi các thư mục đích, ít nhất là trên máy tính mà tôi đã thử. Bạn có thể bỏ hoàn toàn tail/ headmột phần. rsyncdiễn giải từng dòng trong tệp bao gồm dưới dạng tên tệp và chỉ cần bỏ qua các tệp không tồn tại, do đó, sẽ không có gì xảy ra nếu bạn giữ các dòng bổ sung (trừ khi bạn có các tệp có tên "gửi danh sách tệp tăng dần", v.v. những tập tin này cũng sẽ được sao chép).
ThatGuy
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.