Возможность 1
Не используя правила фильтрации rsync, но расширение оболочки * вы можете сделать:
а. Чтобы включить все каталоги bin в иерархию top_dir :
rsync -av -R top_dir/**/bin/ destination_path
Здесь -R - параметр rsync, обозначающий относительный и означающий, что структура каталогов сохраняется.
** - это шаблон оболочки, который рекурсивно ищет каталоги с именем bin в top_dir . Итак, в приведенном выше примере командная строка расширяется до:
rsync -av -R top_dir/proj1/bin/ top_dir/proj2/bin/ destination_path
б. Если вы хотите включить каталог bin один уровень ниже каталога проекта, просто используйте один * (который также работает с "древними" оболочками!):
rsync -av -R top_dir/*/bin/ destination_path
* Вам нужна последняя версия bash (> 4) и активировать рекурсивное сглаживание с помощью shopts -s globstar . С zsh рекурсивное сглаживание используется по умолчанию.
Возможность 2
Вам нужны только правила фильтрации rsync:
а. Чтобы включить все каталоги bin в иерархию top_dir :
rsync -av -m --include='**/' --include='**/bin/**' --exclude='*' top_dir/ destination_path
Первое правило включения может быть неочевидным +, но гарантирует, что во всех каталогах (обратите внимание на конечный символ /) выполняется поиск, второе наконец добавляет все в каталоги bin а правило исключения исключает все остальное. -m удостоверяется, что пустые каталоги не копируются.
б. Только один уровень ниже директории проекта:
rsync -av -m --include='/*/' --include='/*/bin/***' --exclude='*' top_dir/ destination_path
Используя *** синтаксис rsync> = 2.6.7. Начальные / в шаблонах представляют top_dir , в противном случае шаблоны сопоставляются с концом пути к файлу.
+ Искать в / rsync /some/path/this-file-will-not-be-found в man rsync