Назад | Перейти на главную страницу

rsync --exclude не исключая

Я использую rsync на сервере Ubuntu 12.04 LTS со следующим сценарием для резервного копирования всех /однако всякий раз, когда я запускаю сценарий (от имени пользователя root), каталог /backup является включены, когда это следует исключить:

#!/bin/sh
rsync --password-file=/etc/rsyncd.password --delete -aAXzv --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs,/home/*/Downloads/*,/backup/*,/var/spool/squid3,/opt/atlassian,var/www/\~*} /* fsbak@servername::fsbak

Почему это происходит и как заставить rsync игнорировать /backup?

Изменение #!/bin/sh к #!/bin/bash в скрипте исправлена ​​эта проблема. Расширение фигурных скобок, используемое в скрипте, представляет собой bash функция и, как таковая, недоступна в sh.

Из rsync(1) страница руководства:


      --exclude=PATTERN       exclude **files** matching PATTERN

Когда вы указываете /backup/*, вы исключаете все файлы внутри каталога, но не в самом каталоге. Чтобы исключить каталог, используйте /backup

Пример:


$ tree test
test
├── a
│   ├── 1
│   ├── 2
│   ├── 3
│   └── 4
└── b

$ rsync -av --exclude=4 $PWD/test/a/ $PWD/test/b/
sending incremental file list
./
1/
2/
3/

sent 87 bytes  received 27 bytes  228.00 bytes/sec
total size is 0  speedup is 0.00

$ tree test
test
├── a
│   ├── 1
│   ├── 2
│   ├── 3
│   └── 4
└── b
    ├── 1
    ├── 2
    └── 3

9 directories, 0 files