rsyncПравила глобального фільтра, що починаються з провідних /, прив’язані до кореня передачі. Цитуючи з розділу "ВКЛЮЧИТИ / ВИКЛЮЧВАЙТЕ ПРАВИЛА ПАТЕРНУ" на сторінці "man":
якщо шаблон починається з a /, то він прив’язаний до певного місця в ієрархії файлів, інакше він буде зіставлений проти кінця імені шляху. Це схоже на провідний ^ у регулярних виразах. Таким чином, "/ 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" відповідав би будь-якій точці ієрархії, де в каталозі під назвою "sub" було знайдено "foo". Дивіться розділ "АНКОРУВАННЯ ВКЛЮЧЕННЯ / ВИКЛЮЧЕННЯ ПАТЕРНЕТІВ" для повного обговорення того, як вказати шаблон, що відповідає корені передачі.
Таким чином, фільтр-шаблон build/буде відповідати каталогу побудови в будь-якому місці /home/ben, навіть /home/ben/many/sub/directories/build/.