rsync игнорирует привязанный шаблон исключения

Я делаю следующее:

rsync --recursive --delete --delete-excluded --exclude-from=$HOME/etc/rsync_exclude.txt --relative --safe-links --executability . /path/to/savedir

Обратите внимание, что исходный каталог - это рабочий каталог (указанный как .)

Внутри рабочего каталога у меня есть каталог ./ repository и файл ./ Vagrantfile .

Файл rsync_exclude.txt содержит, среди прочего, строки

/repository/
/Vagrantfile

. Я ожидал, что эти записи будут превышать мои репозиторий и Vagrantfile , поскольку

  • ведущая косая черта означает, что имена должны быть привязаны к корневому каталогу для сохранения, который является рабочим каталогом, а
  • завершающая косая черта в репозитории явно указывает, что это каталог , а не файл

Однако копируются обе записи.

Что я сделал не так?

(Это rsync 2.6.9, работающий на MacOS Sierra (но я не думаю, что в данном случае это имеет значение)).

ОБНОВЛЕНИЕ:

При отладке rsync (с использованием -vv и --dry-run) я ясно вижу, что все правила без привязки принимаются (например, rsync сообщает мне скрытие каталога vp5 / .git из-за шаблона .git / ), но ни одно из закрепленных правил не работает. Я также пытался заменить исходный каталог (.) На ./ или $ PWD, но это тоже не имело никакого эффекта.

Кроме того, когда я удаляю начало / (например, превращая / repository / в репозиторий /), каталог исключается. Конечно, теперь этот каталог будет исключен где-нибудь в дереве, что не вредит в данном конкретном случае, но не то, что я хочу в целом).

0
03.05.2017, 09:54
1 ответ

Следующее работает для меня с rsync версии 3.1.2:

$ ls -F
archive/  backup/  mk-archive.sh*  mk-backup.sh*  mk-cloud.sh*  mk-source.sh*  source/

$ cat /tmp/excludes
/archive/
/backup/
/mk-archive.sh
/mk-backup.sh

$ mkdir -p /tmp/target
$ rsync --relative --recursive --delete --delete-excluded --exclude-from=/tmp/excludes . /tmp/target/

$ ls -F /tmp/target
mk-cloud.sh*  mk-source.sh*  source/

Здесь происходит то, что описано на справочной странице для rsync, поэтому ваши шаблоны должны быть привязаны к / сразу в начале копирования (т.е.под . ).

ПРИКРЕПЛЕНИЕ ШАБЛОНОВ ВКЛЮЧЕНИЯ/ИСКЛЮЧЕНИЯ
Как упоминалось ранее, глобальные шаблоны включения/исключения закрепляются в «корне передачи» [...].

Поскольку сопоставление относится к корневому каталогу передачи, изменение косой черты в конце исходного пути или изменение использования параметра --relative влияет на путь, который необходимо использовать при сопоставлении (в в дополнение к изменению того, какая часть дерева файлов дублируется на целевом хосте). [...]

Пример:

 cd /home; rsync -a --относительно меня/для вас//назначения
 

+/- шаблон: /me/foo/bar (начинается с указанного пути)
+/- шаблон: /you/bar/baz (то же самое)

Целевой файл: /dest/me/foo/bar
Целевой файл: /dest/you /bar/baz

Вы можете увидеть, какие исключения выполняются, добавив -vv (или --verbose --verbose) к команде rsync. .

0
28.01.2020, 04:46

Теги

Похожие вопросы