Restic: Исключить шаблоны, которые не применяются

Созданный на 20 июн. 2017  ·  4Комментарии  ·  Источник: restic/restic

Вывод restic version

restic 0.6.1 (v0.6.1-126-gb0fb95df)
скомпилирован с go1.8.3 на darwin / amd64

Как именно вы начали отдыхать? (Включите полную командную строку)

restic backup --exclude-file ~/exclude.txt ~

Какой бэкэнд / сервер / сервис вы использовали?

sftp в локальную сеть

Ожидаемое поведение

Пропустить файлы, соответствующие шаблону в exclude.txt

Фактическое поведение

Файлы были включены, если я резко не ослабил шаблон до такой степени, что шаблон стал слишком неоднозначным.

Шаги по воспроизведению поведения

Используя файл исключения, подобный этому:

.[^.]*
/matt/Applications
/matt/Dropbox
/matt/Downloads
/matt/VirtualBox VMs
*.vmdk

Моя цель - пропустить точечные файлы и несколько конкретных папок в моем каталоге $ HOME (с именем matt ) (например, не во всех папках с именем «Приложения»). Да, и любые файлы .vmdk (они могут быть огромными!)

Когда я смягчил паттерны до этого:

.[^.]*
Applications
Dropbox
Downloads
VirtualBox VMs
*.vmdk

он сработал (то есть пропустил папки), но это слишком неоднозначно, так как, например, я не хочу пропускать все папки с именем «Загрузки».

Вы знаете, чем это могло быть вызвано?

Вероятно, я до сих пор не понимаю, как правильно исключить шаблоны. : smile: Я прочитал # 1005 и, наверное, меня смущает, требуются ли абсолютные пути для --exclude или требуются ли абсолютные пути репо, как с --include.

documentation bug

Самый полезный комментарий

Вздох, да, вы абсолютно правы. Шаблоны исключения являются абсолютными в отношении того, что вы делаете резервную копию:
Шаблон /home/matt/*.go соответствует всем файлам Go в вашем доме, когда вы запускаете restic backup /home/matt . Из-за того, как работает архиватор (см. № 549, неправильное дизайнерское решение, которое необходимо исправить), префикс /home/ отбрасывается, а компонент пути верхнего уровня в снимке состояния - /matt . Поэтому для восстановления вам нужно использовать шаблон включения /matt/*.go чтобы сопоставить те же файлы. Знаю, что плохо, со временем поправлю :)

Итак, это исправленный список исключаемых файлов для вашего варианта использования:

.[^.]*
/home/matt/Applications
/home/matt/Dropbox
/home/matt/Downloads
/home/matt/VirtualBox VMs
*.vmdk

Все 4 Комментарий

Обновление: Хорошо, замена /matt/ на $HOME/ похоже, сработала, хотя я считаю несоответствие между абсолютными путями --exclude и --include немного странным / удивительным.

Обычно $HOME/blabla - это /home/matt/blabla или вы что-то меняли в своей системе?

Вздох, да, вы абсолютно правы. Шаблоны исключения являются абсолютными в отношении того, что вы делаете резервную копию:
Шаблон /home/matt/*.go соответствует всем файлам Go в вашем доме, когда вы запускаете restic backup /home/matt . Из-за того, как работает архиватор (см. № 549, неправильное дизайнерское решение, которое необходимо исправить), префикс /home/ отбрасывается, а компонент пути верхнего уровня в снимке состояния - /matt . Поэтому для восстановления вам нужно использовать шаблон включения /matt/*.go чтобы сопоставить те же файлы. Знаю, что плохо, со временем поправлю :)

Итак, это исправленный список исключаемых файлов для вашего варианта использования:

.[^.]*
/home/matt/Applications
/home/matt/Dropbox
/home/matt/Downloads
/home/matt/VirtualBox VMs
*.vmdk

@ibib На моем Mac мой домашний каталог - /Users/matt , но поскольку --include использует абсолютный путь к репозиторию (как показывает restic ls ), я решил, что правильный абсолютный путь будет /matt/... .

@ fd0 А! В этом больше смысла, спасибо за объяснение. Таким образом, --exclude при использовании с restic backup является абсолютным для файловой системы, а --include (используется с restic restore ) является абсолютным для репозитория. Другими словами, шаблоны являются абсолютными в зависимости от того, откуда берутся файлы.

Большое спасибо за объяснение. Теперь я лучше понимаю, почему 549 - это проблема, которую вы хотите исправить. :улыбка:

Была ли эта страница полезной?
0 / 5 - 0 рейтинги