RSync - исключая конкретный подкаталог и его дочерние элементы, где подкаталог существует на разных уровнях

37

G'Day,

Я использую rsync для рекурсивной синхронизации дерева удаленных папок, которое выглядит примерно так:

/folderA/a1/cache
/folderA/a1/cache/A1
/folderA/a1/cache/A2
/folderA/a1/somefolder
/folderA/a1/someotherfolder
/folderA/a2/somefolder/cache
/folderB/cache/
/folderB/b1/somefolder/cache
/folderB/b1/somefolder/yetanotherfolder/cache
/folderB/b1/somefolder/yetanotherfolder/cache/B1
/folderB/b1/somefolder/yetanotherfolder/cache/B2

Я не знаю, как будет выглядеть дерево папок, и оно со временем изменится. Так что я хочу сделать это рекурсивно rsync выше, но исключить папку "кеш" и любые подпапки, которые он содержит, чтобы я в конечном итоге закончил синхронизацию:

/folderA/a1
/folderA/a1/somefolder
/folderA/a1/someotherfolder
/folderA/a2/somefolder
/folderB/
/folderB/b1/somefolder
/folderB/b1/somefolder/yetanotherfolder/

Какие-либо предложения?

Край
источник
Смотрите также руководство по фильтру rsync .
Жиль "ТАК - перестань быть злым"

Ответы:

55

Вы хотите --excludeфлаг. Например, локальный rsync:

rsync -a --exclude cache/ src_folder/ target_folder/

Это действительно так просто - это правило исключения будет соответствовать каталогу с именем «cache» в любом месте вашего дерева.

Для получения дополнительной информации ищите «--exclude» и раздел «ПРАВИЛА ФИЛЬТРА» на справочной странице rsync:

http://www.samba.org/ftp/rsync/rsync.html

Jander
источник
1
Doh !!. Спасибо, это простые ответы, которые мне нравятся больше всего :-)
TheEdge
1
Как насчет нигде в дереве? Мол, только исключить a/cache. UPD Посмотри этот ответ
x-yuri
2
Также --exclude /cache/(с начальным /) будет исключен только a/cacheкаталог, а не каталог с именем cache.
Амир Али Акбари
Почему a/ b/в приведенной выше командной строке, что это значит?
Даниэль
1
@Danijel: a/каталог, из которого мы синхронизируем (или копируем); b/каталог, в который мы синхронизируемся.
Джеандр