Я делаю следующее:
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 / в репозиторий /), каталог исключается. Конечно, теперь этот каталог будет исключен где-нибудь в дереве, что не вредит в данном конкретном случае, но не то, что я хочу в целом).
Следующее работает для меня с 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
. .