Я использую 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