Как исключить несколько каталогов с rsync?

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

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

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

3 ответа

Решение

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

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

Если необходимо исключить несколько каталогов и / или файлов, создайте текстовый файл и используйте --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

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

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

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/
Другие вопросы по тегам