Tôi nghĩ rằng --includenó được sử dụng để bao gồm một tập hợp con các tệp bị loại trừ bởi --exclude, thay vì chỉ bao gồm những tệp đó. Nói cách khác: bạn phải nghĩ đến nghĩa bao gồm không loại trừ .
Hãy thử thay thế:
rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to"
Đối với rsync phiên bản 3.0.6 trở lên, thứ tự cần được sửa đổi như sau (xem nhận xét):
rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"
Thêm -mcờ sẽ tránh tạo cấu trúc thư mục trống trong đích. Đã thử nghiệm trong phiên bản 3.1.2.
Vì vậy, nếu chúng ta chỉ muốn các tệp * .sh, chúng ta phải loại trừ tất cả các tệp --exclude="*", bao gồm tất cả các thư mục --include="*/"và bao gồm tất cả các tệp * .sh --include="*.sh".
Bạn có thể tìm thấy một số ví dụ điển hình trong phần Bao gồm / Loại trừ Quy tắc mẫu của trang người đàn ông