rsync không thể xóa thư mục không trống


10

Khi đồng bộ hóa bản sao lưu từ xa của tôi, tôi nhận được lỗi rsync cannot delete non-empty directory.

Tôi biết nguyên nhân: Tôi đã loại trừ một số tệp và khi rsync cố xóa một thư mục từ xa vì nó không tồn tại cục bộ, nó không thể vì nó không trống. Nếu không có loại trừ, thư mục sẽ bị xóa.

Tôi cũng biết rằng tôi có thể thoát khỏi vấn đề bằng cách sử dụng - loại trừ, nhưng đó không phải là điều tôi muốn.

Tôi muốn bỏ qua việc tải lên một số tệp nhất định (vì chúng quá lớn so với tốc độ tải lên của tôi), nhưng tôi muốn giữ những tệp mà tôi đã tải lên một thời gian trước nếu chúng tồn tại cục bộ . Nếu chúng không tồn tại cục bộ, chúng sẽ bị xóa. --delete-loại trừ sẽ xóa tất cả chúng ở phía xa.

Điều đó cũng có nghĩa là nếu một thư mục không còn tồn tại cục bộ nữa, thì nó sẽ bị xóa ngay cả khi nó chứa các tệp bị loại trừ.

Có thể thiết lập rsync để thực hiện điều này?

Câu trả lời:


5

Sử dụng công cụ psửa đổi:

Một p chỉ ra rằng một quy tắc là dễ hỏng, có nghĩa là nó bị bỏ qua trong các thư mục đang bị xóa. Chẳng hạn, các quy tắc mặc định của tùy chọn -C loại trừ những thứ như "CVS" và "* .o" được đánh dấu là dễ hỏng và sẽ không ngăn thư mục bị xóa trên nguồn bị xóa trên đích.

Ví dụ: tôi sử dụng -Ftùy chọn "yêu cầu rsync tìm kiếm các tệp bộ lọc .rsync-bộ lọc đã được rắc qua hệ thống phân cấp và sử dụng các quy tắc của chúng để lọc các tệp trong quá trình chuyển."

My .rsync-filterchứa các dòng như thế này để lọc ra các "phân nhỏ" mà máy Mac để lại phía sau chúng:

-p .DS_Store
-p ._*

Nếu sử dụng excludethay vì chỉ -, hãy thêm dấu phẩy. Ví dụ :

exclude,p .DS_Store
exclude,p Thumbs.db

0

Bạn có thể sử dụng công cụ sửa đổi bao gồm / loại trừ mẫu, thêm -s vào mẫu bạn đã sử dụng. Nó nói với rsync loại trừ quy tắc chỉ dành cho phía gửi.

-n: chỉ kiểm tra những gì sẽ xóa trên desc, không xóa mẫu: * .sh desc: / home / kg / tmp

aim: muốn xóa tập tin cuối của .sh trên desc, nhưng nếu bạn làm điều này, bạn không thể xóa trên desc: rsync -rvz --exclude * .sh --delete -n conkg kg@192.168.31.202: / nhà / kg / tmp

nên đổi thành: vui lòng thêm -n khi bạn kiểm tra thử nghiệm: rsync -rvz --exclude-from del.txt -n --delete conkg kg@192.168.31.202: / home / kg / tmp xóa thực sự: rsync -rvz - loại trừ-từ del.txt --delete conkg kg@192.168.31.202: / home / kg / tmp mèo del.txt -s * .sh

hoặc: rsync -rvz --exclude -s * .sh --delete conkg kg@192.168.31.202: / home / kg / tmp


-2

chỉ cần sử dụng các tùy chọn '--max-size = xx' và '--delete' của rsync. Nó sẽ làm mọi thứ tự động và đáp ứng tất cả các yêu cầu của bạn.


Nó nhiều nhất sẽ là một cách giải quyết. Tôi muốn bỏ qua các tập tin Mov, avi và cr2 hoàn toàn vì chúng thường rất lớn. Nhưng những cái tôi đã tải lên trên một dòng nhanh hơn một thời gian trước nên được giữ lại. Bây giờ vấn đề là các tệp JPG lớn nhất lớn hơn các tệp CR2 nhỏ nhất, vì vậy giải pháp này không lý tưởng. Tôi thà sử dụng tính năng loại trừ để lọc tên tập tin.
tuyên bố
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.