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