我在 Ubuntu 12.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
?
答案1
在脚本中更改#!/bin/sh
为已修复此问题。脚本中使用的花括号扩展是一项功能,因此在 中不可用。#!/bin/bash
bash
sh
答案2
来自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