rsync
Правила глобального фильтра, начинающиеся с ведущего /
, привязаны к корню передачи. Цитата из раздела «ВКЛЮЧИТЬ / ИСКЛЮЧИТЬ ПРАВИЛА ШАБЛОНА» справочной страницы:
если шаблон начинается с /, то он привязывается к определенной точке в иерархии файлов, в противном случае он сопоставляется с концом пути. Это похоже на ведущий ^ в регулярных выражениях. Таким образом, «/ foo» будет соответствовать имени «foo» либо в «корне передачи» (для глобального правила), либо в каталоге файла слияния (для правила для каждого каталога).
По вашей команде ( rsync ... -arv /home/ben home-ben/
) файл /home/ben/foo
будет передан home-ben/ben/foo
. Корень передачи home-ben
и правильный путь фильтра /ben/foo
. Таким образом,
- чтобы соответствовать
/home/ben/.ccache
вам нужен путь фильтра/ben/.ccache
- чтобы соответствовать
/home/ben/build/
вам нужен путь фильтра/ben/build/
Более подробное объяснение можно найти в разделе «ЯКОРЬ ВКЛЮЧИТЬ / ИСКЛЮЧИТЬ РИСУНКИ» rsync(1)
страницы руководства .
Обратите внимание, что просто опустить ведущие /
не обязательно то, что вы хотите. Цитируем снова из того же раздела справочной страницы:
Неквалифицированный «foo» будет соответствовать имени «foo» в любом месте дерева, потому что алгоритм применяется рекурсивно сверху вниз; он ведет себя так, как будто каждый компонент пути получает поворот в конце имени файла. Даже незанятый «sub / foo» будет совпадать в любой точке иерархии, где «foo» найден в каталоге с именем «sub». См. Раздел «ЗАКЛЮЧЕНИЕ ВКЛЮЧАЙТЕ / ИСКЛЮЧАЙТЕ ШАБЛОНЫ» для полного обсуждения того, как указать шаблон, который совпадает с корнем передачи.
Таким образом, шаблон фильтра build/
будет соответствовать каталогу сборки в любом месте /home/ben
, даже /home/ben/many/sub/directories/build/
.