Complex包含/不包含rsync

我正在努力解决rsyncfilter语法来执行复杂的包含/排除,并试图实现以下内容:

Include / Exclude /home Include /home/user1/* Include /home/user2/subdir/* 

我已经在filter语法上尝试了许多变体,尽pipe多次阅读手册页,但我无法得到这种效果。 Rsyncfilter似乎是非常强大的,我发现很难相信他们不能处理这种常见的情况。

在使用排除规则之前,需要将所有父目录包括到所需的目录中。

例如,我在备份脚本中使用以下内容:

 rsync -av \ --filter='+ /var/' \ --filter='+ /var/backups/' \ --filter='- /var/*' \ / \ $DEST 

所以在你的情况下,你需要像下面这样的东西:

 rsync -av \ --filter='+ /home/' \ --filter='+ /home/user1/' \ --filter='+ /home/user2/' \ --filter='+ /home/user2/subdir/' \ --filter='- /home/user2/*' \ --filter='- /home/*' \ / \ $DEST 

在命令行上:

 rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST 

删除--dry-run ,使其function,用您的目的地replace“DEST”,如果需要添加用户和主机到源“/”。

从规则文件:

 rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST 

/etc/rsync/somerules.rules的内容可能是:

 +/ /home/user1 -/ /home/* 

你应该testing这些,你可能需要做一些调整,但这应该让你开始。