首页 > 解决方案 > rsync --exclude 不排除第一个值

问题描述

当我使用 rsync--exclude时,如下所示:

rsync -avzhe --exclude={'/var/','/generated/','/app/etc/env.php'} --dry-run /home/site/ /home/site2/

/var/...不排除该目录。

但是,如果我这样做:

rsync -avzhe --exclude={'/ignore/','/var/','/generated/','/app/etc/env.php'} --dry-run /home/site/ /home/site2/

一切都按预期工作,除了/ignore/目录是假的。似乎在使用exclude={}语法时,第一个值被忽略了。

我究竟做错了什么?

标签: rsync

解决方案


你的代码是:

rsync -avzhe --exclude={'/var/','/generated/','/app/etc/env.php'} [...]

{}bash 语法。展开后命令行变为:

rsync -avzhe --exclude=/var/ --exclude=/generated/ [...]

扩展rsync选项给出:

rsync -a -v -z -h -e --exclude=/var/ --exclude=/generated/ [...]

rsync选项-e定义为:

-e, --rsh=COMMAND           specify the remote shell to use

从这里我们可以看到,后面的第一个参数-e被用作COMMAND(而不是被视为排除规则)。您正在执行本地复制,因此未使用此选项/参数对。如果您一直在执行远程复制,您会看到如下错误:rsync: Failed to exec --exclude=/var/

解决方案是指定一个COMMANDfor-e或不使用它。


推荐阅读