Tôi nghĩ rằng --include
nó đượ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 -m
cờ 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