Как исключить файлы в rsync?

12

Я использую Ubuntu Server 12.04, теперь я хочу сделать резервную копию некоторых файлов с помощью rsync, вот попытка:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Как видите, я хочу сделать резервную копию всех файлов в папке $ HOME / Documents в папке $ HOME / Backups / TEST , но исключить файлы в папке another и temp . Но мне не удалось, rsync все равно скопировал файлы в обе исключенные папки:

ls $HOME/Backups/TEST/another
test

test это файл в папке другой , и он тоже копируется, хотя я исключаю файл в rsync, почему? Как сделать так, чтобы эти файлы были фактически исключены?

Searene
источник

Ответы:

11

У вашей команды rsync есть несколько проблем (также смотрите man-страницу для rsync для подробного объяснения правил фильтрации).

  • нам нужна --excludeкоманда для каждого шаблона.
  • указанные пути должны быть относительно исходного пути (без абсолютных путей).
  • опции должны быть даны прежде, чем мы укажем источник и место назначения.

Для вашего примера будет работать следующий синтаксис:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Обратите внимание, что если шаблон исключения завершается, /он ссылается на каталог. Если вы пропустите это, файлы и каталоги с таким именем будут исключены. Замените его подстановочным знаком, *чтобы исключить все файлы или каталоги с этой строкой в ​​их именах.

Takkat
источник
6
Это не совсем правильно. Я не уверен, как это работает, но из эксперимента --exclude=/fooисключит каталог fooнепосредственно в источнике, но --exclude=fooисключит любые каталоги с именем foo, даже в подкаталогах.
Sparhawk
10

Возможно, вам будет проще добавлять .rsync-filterфайлы в исходные каталоги и использовать эту -Fопцию.

Со страницы руководства:

-F: опция -F является сокращением [...] для этого правила:

 --filter='dir-merge /.rsync-filter'

Это говорит rsync искать файлы для каждого каталога .rsync-filter, которые были разбросаны по иерархии, и использовать их правила для фильтрации файлов при передаче.

Например: в $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Вместо этого -вы также можете написать все слово exclude.

Теперь вы можете

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
mivk
источник