Câu trả lời:
Lý do lệnh của bạn không hoạt động được giải thích bởi trang hướng dẫn cho rsync (nhấn mạnh thêm):
--xóa bỏ
Điều này nói với rsync để xóa các tệp không liên quan khỏi phía nhận (những tệp không ở phía gửi), nhưng chỉ đối với các thư mục đang được đồng bộ hóa. Bạn phải yêu cầu rsync gửi toàn bộ thư mục (ví dụ: "dir" hoặc "dir /") mà không sử dụng ký tự đại diện cho nội dung của thư mục (ví dụ "dir / *") vì ký tự đại diện được mở rộng bởi shell và do đó rsync được mở rộng yêu cầu chuyển các tệp riêng lẻ, không phải thư mục mẹ của tệp. Các tệp bị loại trừ khỏi quá trình chuyển cũng bị loại trừ khỏi bị xóa trừ khi bạn sử dụng tùy chọn loại trừ --delete hoặc đánh dấu các quy tắc là chỉ khớp với bên gửi (xem phần sửa đổi bao gồm / loại trừ trong phần LỌC LỌC).
Vì vậy, khi bạn chạy
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
các tệp không mong muốn trong DEST sẽ không bị xóa vì thực tế bạn chưa yêu cầu đồng bộ hóa thư mục, nhưng chỉ cho một số ít tệp cụ thể. Để có được kết quả mà bạn mong muốn, hãy thử một cái gì đó như thế này:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
Lưu ý rằng thứ tự bao gồm và loại trừ vấn đề chỉ thị. Về cơ bản, mỗi tệp được kiểm tra theo các mẫu bao gồm hoặc loại trừ theo thứ tự xuất hiện. Do đó, các tệp có phần mở rộng .jpg hoặc .txt được đồng bộ hóa do chúng khớp với các mẫu "được bao gồm" trước khi chúng khớp với mẫu "*" bị loại trừ. Mọi thứ khác được loại trừ bởi --exclude '*'
mô hình. Các --delete-excluded
Đảm bảo lựa chọn mà ngay cả các tập tin trên bên DEST loại trừ sẽ bị xóa.
--delete-excluded
. Không có nó, chỉ *.jpg
và *.txt
có thể bị xóa ở phía đích. Với nó, các tập tin không liên quan cũng sẽ bị xóa. Bạn có thể quan tâm đến hướng dẫn này trên các bộ lọc rsync .