На самом деле, ни один из них не является полностью точным.
Эрик наполовину прав, говоря, что
Поскольку test / a является базовым каталогом, из которого выполняется синхронизация, шаблон исключения указывается, начиная с /
Это правда, что корень шаблона исключения равен test/a
(то есть шаблон /some/path
связывается с test/a/some/path
), но это еще не все.
со страницы руководства:
если шаблон начинается с /, то он привязывается к определенной точке в иерархии файлов, в противном случае он сопоставляется с концом пути. Это похоже на ведущий ^ в регулярных выражениях. Таким образом, "/ foo" будет соответствовать файлу с именем "foo" в любом из
«корень передачи» (для глобального правила) или в каталоге файла слияния (для правила для каждого каталога).
Мы можем игнорировать бит per-directory
, так как он здесь к нам не относится.
Следовательно, rsync -nvraL test/a test/dest --exclude=a/b/c/d
определенно исключит test/a/b/c/d
(и детей), но также исключит test/a/other/place/a/b/c/d
.
rsync -nvraL test/a test/dest --exclude=/b/c/d
, с другой стороны, исключит только test/a/b/c/d
(и дочерние элементы) (test/a
является точкой, к которой привязывается /
).
Вот почему вам все еще нужна начальная косая черта привязки, если вы хотите исключить этот конкретный путь из резервной копии. Это может показаться незначительной деталью, и тем более конкретным будет ваш шаблон исключения (например, Pictures
против home/daniel/Pictures
), но он может просто укусить вас в задницу.