Как исключить подстановочный каталог, но включить подстановочные файлы, используя rdiff-backup?

Я использую rdiff-backup. Действительно потрясающий простой мощный инструмент резервного копирования. Однако я борюсь с шаблонами с подстановочными знаками. У меня есть эта структура каталогов:

/data/aaa/cache
/data/bbb/cache
/data/ccc/cache
etc....

В каждом каталоге кеша находятся оригинальные файлы и файлы кеша. Оригинальные файлы названы просто 1.jpg, 2.png, 3.gif, и так далее. Файлы кэша имеют некоторую строку, прикрепленную к исходному имени файла.

Поэтому я хочу сделать резервную копию всех каталогов /data/*/cache, но включить только оригинальные файлы, а не файлы кэша.

Я использую эту команду:
rdiff-backup --exclude **/cache --include **/cache/+([0-9]).+([a-z]) /data /backup

Но rdiff-backup возвращает это, и я потерян:

Found interrupted initial backup. Removing...
Fatal Error: Last selection expression:
    Command-line include glob: **/cache/+([0-9]).+([a-z])
only specifies that files be included.  Because the default is to
include all files, the expression is redundant.  Exiting because this
probably isn't what you meant.

2 ответа

Решение

С http://rdiff-backup.nongnu.org/rdiff-backup.1.html:

   A given file is excluded by the file selection system exactly
   when the first matching file selection condition
   specifies that the file be excluded; otherwise the file is included.

...

   For instance,

          rdiff-backup --include /usr --exclude /usr /usr /backup

   is exactly the same as

          rdiff-backup /usr /backup

   because  the  include  and  exclude  directives  match exactly the same
   files, and the --include comes first, giving it precedence.

Так что, в вашем случае, это жалуется на финал --include потому что, если файл попадает туда (то есть он не соответствует предыдущему --exclude) оно будет включено, соответствует ли оно --include, Вот что пыталось сказать сообщение об ошибке.

Что касается того, как достичь своей цели...

Предполагая, что вы хотите исключить только пути формы: /data/*/cache/[0-9]*.[a-z][a-z][a-z]?* просто укажите, что:

rdiff-backup --exclude '/data/*/cache/[0-9]*.[a-z][a-z][a-z]?*' --exclude '*' /data /backup

Это должно работать (я не проверял это).

Вы можете сделать два шага:

  1. создайте список всех файлов, которые вы хотите исключить, например, с помощью find . -name "**/cache" > exclude.lst
  2. используйте список с --exclude-filelist exclude.lst

Таким образом, вы можете избежать борьбы с опцией glob, и у вас будет полный контроль над вашими исключениями

Другие вопросы по тегам