![使用 rsync 进行复杂的包含/排除](https://linux22.com/image/515957/%E4%BD%BF%E7%94%A8%20rsync%20%E8%BF%9B%E8%A1%8C%E5%A4%8D%E6%9D%82%E7%9A%84%E5%8C%85%E5%90%AB%2F%E6%8E%92%E9%99%A4.png)
我正在尝试制定 rsync 过滤器语法来执行复杂的包含/排除操作,并尝试实现以下目标:
Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*
我尝试过多种过滤器语法,尽管多次阅读手册页,但我无法获得这种效果。Rsync 过滤器似乎非常强大,我很难相信它们无法处理这种常见情况。
答案1
在使用排除规则之前,您需要将所有父目录都包含到所需的目录中。
例如,我在备份脚本中使用以下内容:
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
答案2
在命令行上:
rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST
删除--dry-run
以使其正常运行,用您的目的地替换“DEST”,并根据需要将用户和主机添加到源“/”。
来自规则文件:
rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST
其中的内容/etc/rsync/somerules.rules
可能为:
+/ /home/user1
-/ /home/*
您应该测试这些,并且可能需要做一些调整,但这应该可以帮助您入门。