Другое решение здесь не работает.
Надежный путь
У вас нет выбора, кроме как вручную опуститься для каждого уровня вашего подкаталога. Нет риска включать ненужные файлы, так как rsync не включает файлы включенных каталогов.
1) Создайте файл фильтра включения, например, «include_filter.txt»:
+ /specs/
+ /specs/install/
+ /specs/install/project1/***
- /specs/**
2) Запустите его:
rsync -avz --delete --include-from=include_filter.txt \
/srv/http/projects/project/ \
user@server.com:~/projects/project
- Не забудьте начальную косую черту "/", иначе вы можете сопоставить подкаталоги с именем "** / specs / install / project1 /".
- При выборе фильтра включаемого типа (--include-from = FILE) начальный знак плюс "+" фактически необязателен, поскольку это действие по умолчанию без знака. (По умолчанию вы можете использовать противоположное «-» с --exclude-from = FILE.)
- Двойные звезды "**" означают "любой путь"
- Тройная звезда "***" означает "любой путь, включая этот самый каталог"
Простой способ
Вы можете запустить ваши фильтры "* /", позволяя rsync опускаться на все ваши подуровни. Это удобно, но:
- Все каталоги будут включены, хотя и пустые. Это можно исправить с помощью опции rysnc -m, но тогда все пустые каталоги будут пропущены.
1) Создайте файл фильтра включения, например, «include_filter.txt»:
+ /**/
+ /specs/install/project1/***
- /specs/**
2) Запустите его:
rsync -avzm --delete --include-from=include_filter.txt \
/srv/http/projects/project/ \
user@server.com:~/projects/project
Обратите внимание на добавленную опцию -m.