次のスクリプトを使用してUbuntu12.04 LTSサーバーでrsyncを使用して、すべての/
をバックアップしていますが、スクリプトを(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/*
を指定すると、ディレクトリ内のすべてのfilesが除外されますが、ディレクトリ自体は除外されません。ディレクトリを除外するには、/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