rsync с абсолютными путями и без учета подпутей

rsync с абсолютными путями и без учета подпутей

Допустим, у меня есть следующая структура на путиorigin_path

origin_path/X=1/A/...
origin_path/X=1/B/...
origin_path/X=1/C/...
...
origin_path/X=2/A/...
origin_path/X=2/B/...
origin_path/X=2/C/...
...
...

Я хотел бы повторить структуру выше по другому пути, называемому destination_path, нотольковключая пути, соответствующие каталогамБвыше.

Другими словами, я хотел бы получить следующее:destination_path

destination_path/X=1/B/...
destination_path/X=2/B/...
destination_path/X=3/B/...
...

Для ясности: часть этой структуры в пути назначения может уже существовать (например, папки destination_path/X=*).

Насколько я понимаю, благодаря комментарию @Gilles, rsyncфильтры могут отлично подойти для этого. Однако я никогда не пользовался ими раньше, и мне немного сложно экстраполировать пример, представленный вФильтр Rsync: копирование только одного шаблонак моей ситуации.

В каком порядке мне следует включать или исключать вещи в моем случае? И как мне сказать rsync использовать origin_pathи destination_pathкак глобальные пути? (в отличие от копирования вещей с относительными путями)

решение1

Следующее должно сделать то, что вам нужно:

rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/

Первое правило включает все каталоги (иначе rsync не спустится в каталоги верхнего уровня). Второе правило включает все в подкаталогах "B". Третье правило исключает все остальное. Параметр --prune-empty-dirsигнорирует пустые каталоги (так как мы включаем все каталоги с первым правилом).

Связанный контент