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/.