A alteração de #!/bin/sh
para #!/bin/bash
no script corrigiu esse problema. A expansão de chaves usadas no script é um recurso bash
e, como tal, não está disponível em sh
.
Estou usando o rsync em um servidor LTS do Ubuntu 12.04 com o seguinte script para fazer o backup de todo o /
, no entanto, sempre que executo o script (como root), o diretório /backup
é incluído , quando deve ser excluído :
#!/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
Por que isso está acontecendo e como posso fazer o rsync ignorar /backup
?
Na% man_de% manpage:
--exclude=PATTERN exclude **files** matching PATTERN
Quando você especifica rsync(1)
, está excluindo todos os arquivos dentro do diretório, mas não o próprio diretório. Para excluir o diretório, use /backup/*
Exemplo:
$ 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
Tags backup rsync ubuntu-12.04 exclude