rsync 'không thể xóa các lỗi thư mục không trống', ngay cả với tùy chọn --force


28

Khi chạy lệnh này:

$ sudo rsync -r --delete --force --checksum --exclude=uploads /data/prep/* /data/app/

Tôi đang nhận được đầu ra sau:

cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source
cannot delete non-empty directory: html/js/ckeditor/_samples
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor

Từ việc đọc, man rsyncấn tượng của tôi là --forcetùy chọn sẽ cho rsync xóa những thư mục không trống này, đó là kết quả mong muốn.

Tham chiếu:

--force                 force deletion of dirs even if not empty

Làm thế nào tôi có thể sửa đổi lệnh để xóa các thư mục không trống?

Tôi đang sử dụng rsync phiên bản 3.0.8, trên phiên bản Gentoo Base System 2.0.3, trong trường hợp có liên quan.

Cập nhật: Đã thêm vào sudolệnh để làm rõ rằng đây không phải là vấn đề về quyền của tệp.


Hệ thống tập tin nào là đích đến? Là hệ thống tập tin cần sửa chữa?
Marcus Downing

Hệ thống tập tin là ext3. Có thể hệ thống tập tin có thể cần hoặc sửa chữa. Tôi sẽ có fsckcơ hội tiếp theo và cập nhật với kết quả.
tommarshall

Tôi chỉ fscklà hệ thống và vấn đề này vẫn còn.
tommarshall

Câu trả lời:


39

Bạn đã thử thêm --delete-excluded?

Nếu bạn xóa một thư mục trong các thư mục bị loại trừ ở phía "từ xa", rsync --deletesẽ không xóa thư mục bị loại trừ trên trang web "cục bộ" của bạn.


Có một thư mục có tên uploadstrong html/js/ckeditor/_source/plugins/uicolor/yui, html/js/ckeditor/_sampleshtml/js/ckeditor/plugins/uicolor/yuithư mục. Cảm ơn bạn đã giúp đỡ.
tommarshall

nếu sử dụng --delete-excludednhưng bạn vẫn muốn loại trừ các tệp / thư mục nhất định khỏi việc xóa, bạn có thể đặt tệp / thư mục này vào --filter 'protect some_dir/', ví dụ:rsync -ac --delete --delete-excluded --exclude '*.html' --filter 'protect .git/' . /target/destination/
alexandre1985

6

Dưới đây là các nguồn có thể của vấn đề này:

(1) Lỗi này có thể là kết quả của tùy chọn -b (--backup). Tùy chọn này sẽ tạo một bản sao lưu của mỗi tệp đã xóa, bằng cách thêm dấu ngã ( ~ ) vào tên tệp của nó. (Điều này làm tôi bối rối, vì tên tệp rõ ràng là một bản sao lưu, nhưng tên thư mục thì không, vì bạn không thể nhìn thấy dấu ngã.)

Để kiểm tra xem đây có phải là trường hợp tương tự không, hãy đọc thư mục đích của bạn ở cấp độ sâu nhất và kiểm tra xem có bất kỳ tệp kết thúc dấu ngã nào (~) không. Lưu ý rằng các tên tệp được gắn dấu ngã này sau đó vô hình trong một số hệ thống duyệt tệp phổ biến, do đó bạn có thể không nhìn thấy chúng.

Để giải quyết trường hợp này, hãy chọn tùy chọn --backup-dir = DIR, ví dụ --backup-dir = .rsync_bak.

(2) Tùy chọn --exclude có thể có kết quả tương tự. Điều này có thể xảy ra trong trường hợp của bạn. Hệ thống mô hình mạnh mẽ, nhưng có thể gây hiểu nhầm. Chẳng hạn, nếu bạn viết --exclude = '* ~', điều này sẽ bỏ qua tất cả các tệp kết thúc dấu ngã, kết quả chính xác như trong trường hợp (1) ở trên.

từ trang người đàn ông rsync:

nếu mẫu bắt đầu bằng a / thì nó được neo vào một vị trí cụ thể trong hệ thống phân cấp của các tệp, nếu không thì nó được khớp với phần cuối của tên đường dẫn

Nếu bạn viết --exclude = uploads, điều này sẽ loại trừ tất cả các tệp có tên "updloads", ở bất kỳ cấp độ nào trong cây tệp của bạn.

Kiểm tra xem có một tệp có tên "tải lên" trong các thư mục không thể xóa của bạn không.

Giải pháp sẽ là thay đổi "--exclude = uploads" thành "--exclude = uploads /"


0

Trong thiết lập của tôi ((nguồn là định dạng Ubuntu loại ext4 để nhắm mục tiêu loại Western Digital fuseblk), nó hoạt động với:

rsync -a -v --progress --modify-window=1 -c -b -i -s -m --del -vv --ignore-errors --chmod=ugo=rwx --delete --delete-excluded  --exclude='*~'  --exclude='.*' --backup-dir=.rsync_bak /home/test /media/user/usbHDD

2
Phần nào trong số này thực sự giải quyết vấn đề?
Michael Hampton

0

Sử dụng quy tắc trong các tập tin bộ lọc thay vì --exclude. Điều này cho phép bạn đánh dấu loại trừ là "có thể thuyết phục", điều này sẽ cho phép bạn xóa các thư mục không trống có chứa các tệp bị loại trừ.

Xem câu trả lời này để biết chi tiết.


-1

Một thư mục phải trống để bạn xóa nó, hệ thống tập tin thường yêu cầu điều đó.

Do đó, thông thường rsynchoặc rmsẽ xóa đệ quy tất cả các nội dung trước và sau đó xóa thư mục hiện trống.

Nếu người dùng hiện tại không phải là chủ sở hữu của tất cả các tệp, quyền hệ thống tệp sẽ không cho phép bạn xóa các tệp đó. Vì chúng sẽ không bị xóa, thư mục không bị xóa và việc xóa sẽ thất bại.

Tôi đoán đầu tiên là một số tệp trong thư mục đó thuộc sở hữu của người dùng khác, ví dụ như apache hoặc không có người dùng.


Cảm ơn. Các tệp trong thư mục thực sự thuộc sở hữu của một người dùng trong nhóm apache, tuy nhiên tôi vừa thử chạy lệnh này với tư cách là người dùng đó và gặp lỗi tương tự.
tommarshall

Ngoài ra, nếu đó là vấn đề về quyền của tệp, tôi sẽ chạy lệnh tương tự như với 'sudo' để giải quyết vấn đề, nhưng đây không phải là trường hợp. Tuy nhiên, xin vui lòng sửa cho tôi về điều này nếu tôi nhầm.
tommarshall

1
Chạy lệnh dưới quyền root nên khắc phục hầu hết các vấn đề về quyền, vâng. (có khả năng nơi đó vẫn sẽ thất bại là trên nfs gắn với tên một, một tập tin bất biến khác) Một kiểm tra đơn giản với ls -lađể xem lý do tại sao các thư mục vẫn chưa có sản phẩm nào. lsattrsẽ hiển thị các tập tin bất biến.
HBruijn

Cảm ơn thông tin bổ sung, tuy nhiên lsattrtừ một trong các thư mục được liệt kê xuất ra các thông tin sau: --------------- ./assets(không có cờ i) và tệp không nằm trên giá trị nfs. Có bất kỳ lý do nào khác mà bạn có thể nghĩ về lý do tại sao lệnh vẫn thất bại với sudo không?
tommarshall

Có bất kỳ liên kết trong đó, hoặc chỉ các tập tin thực sự?
Marcus Downing
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.