Giải pháp khác không hoạt động ở đây.
cách đáng tin cậy
Bạn không có lựa chọn nào khác để tự xuống cho mỗi cấp độ của tiểu thư mục của bạn. Không có nguy cơ bao gồm các tệp không mong muốn, vì rsync không bao gồm các tệp của các thư mục được bao gồm.
1) Tạo một tập tin bao gồm bộ lọc, ví dụ "include_filter.txt":
+ /specs/
+ /specs/install/
+ /specs/install/project1/***
- /specs/**
2) Chạy nó:
rsync -avz --delete --include-from=include_filter.txt \
/srv/http/projects/project/ \
[email protected]:~/projects/project
- Đừng quên dấu gạch chéo bắt đầu "/ ", nếu không bạn có thể so khớp các thư mục con có tên" **/specs/install/project1/".
- Bằng cách chọn bộ lọc loại bao gồm (--include-from = FILE), dấu cộng "+" bắt đầu thực sự là tùy chọn, vì đây là hành động mặc định không có dấu. (Bạn có thể có đối số "-" theo mặc định với --exclude-from = FILE.)
- Các ngôi sao kép "**" có nghĩa là "bất kỳ đường dẫn"
- Các ngôi sao ba "***" có nghĩa là "bất kỳ con đường, trong đó có thư mục này rất"
Cách dễ dàng
Bạn có thể khởi động bộ lọc "* /", cho phép rsync hạ cấp tất cả các cấp phụ của bạn. Điều này thuận tiện nhưng:
- Tất cả các thư mục sẽ được bao gồm, mặc dù trống. Điều này có thể được sửa với tùy chọn rysnc -m, nhưng sau đó tất cả các thư mục rỗng sẽ bị bỏ qua.
1) Tạo một file bao gồm bộ lọc, ví dụ "include_filter.txt":
+ /**/
+ /specs/install/project1/***
- /specs/**
2) Chạy nó:
rsync -avzm --delete --include-from=include_filter.txt \
/srv/http/projects/project/ \
[email protected]:~/projects/project
Lưu ý thêm tùy chọn -m.
Chỉ tìm thấy một câu hỏi tương tự trên linuxquestions.org có thể giúp: http://www.linuxquestions.org/questions/linux-software-2/rsync-include-exclude-problems-636504/ – Chris
Cảm ơn bạn đã giải quyết xong nó! Rsync thực sự có một logic lạ đôi khi. – user1036651
Các bản sao http://stackoverflow.com/questions/7960669/with-rsync-how-do-includes-and-excludes-combine/7961687#7961687 –