Вопрос Как исключить несколько каталогов с помощью rsync?


Я пытаюсь сделать резервную копию моего домашнего каталога с помощью rsync, и я хочу исключить некоторые из каталогов, содержащих мусор. Я хочу специально исключить /home/ben/.ccache а также /home/ben/build, К сожалению, документация для rsync была информационной перегрузкой и не отвечала на мой вопрос. Вот что я пробовал:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

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


136
2017-07-15 23:53


происхождения


Просто хотел сказать, что флаг a подразумевает r уже :) -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) - Populus


ответы:


Хорошо, я чувствую себя очень глупым. Прежде чем я даже разместил этот вопрос, мой друг показал мне, как это сделать, и это очень просто. Чтобы исключить несколько каталогов, вы просто используете несколько --exclude=path переключатели. Итак, моя надпись написана следующим образом:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

178
2017-07-15 23:53



Абсолютный путь не работа для меня (указанная директория молча отключена), тогда как путь относительно исходного каталога работал правильно. Может быть, я что-то упустил, но я бы с осторожностью относился к утверждению @FreeSoftwareServers о том, что абсолютные пути всегда работают. - Soren Bjornstad
FWIW, немного творческий разница использование может быть полезно. Предположим, что вы настраиваете флаги исключения из запуска для запуска в nas_backup.sh, Предположим также, что используют --dry-run, бег: . nas_backup.sh > dryrun.5.txt, отрегулируйте исключение, затем запустите . nas_backup.sh > dryrun.6.txt  затем diff diff dryrun.5.txt dryrun.6.txt | less   это покажет вам, что было добавлено / удалено из области действия между этими двумя прогонами. - JL Peyret
FYI: опция -a включает -r так -ar является избыточным. - David
В отличие от того, что считает FreeSoftwareServers, путь исключений относится к исходному пути, NOT /. Таким образом, комментарий категорически неверен и приведет к сбоям, если вы последуете за ним. Лучшая стратегия заключается в том, чтобы уйти от ведущих / в ваших исключениях, чтобы избежать такого рода психических ошибок. Если источник говорит, / home / me, и если вы исключаете = '/ mydir /', это исключает каталог mydir in / home / me, то есть исключает / home / me / mydir NOT / mydir / at /. К сожалению, я не могу ни спускать, ни редактировать этот комментарий, так как это технически неправильно и вводит в заблуждение. - Lizardx
thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/... объясняет это довольно четко, обратите внимание на раздел: 4. Исключительный путь всегда относителен (к исходному пути) - Lizardx


Если у вас есть несколько каталогов и / или файлов для исключения, создайте текстовый файл и используйте --exclude-from переключатель. Создайте файл с именем exclude_me.txt и в нем перечислены ваши исключения. Пример (/home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

Тогда ваш rsync будет выглядеть примерно так:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

Это некоторая информация о правилах фильтрации, которые могут помочь:

  • /dir/ означает исключение корневой папки /dir
  • /dir/* означает получить корневую папку /dir но не содержание
  • dir/ означает исключение любой папки в любом месте, где содержится имя dir/

  • Примеры исключены: /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cf означает пропустить файлы, которые начинаются с cf в любой папке в /var/spool/lpd

Также см. правила фильтрации раздел на странице руководства.


85
2018-05-19 15:13



Важно отметить, что Корневая папкаозначает корень передачи а не корневой каталог. - jamesdlin


Вы также можете исключить несколько путей в фигурных скобках:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

58
2017-09-18 08:59



это работает красиво, только не под sh, только под bash, я узнал «трудный путь», - xor
После запятой нет пробела. Узнал, что трудный путь тоже - styl3r