rsync 过滤器:未找到过滤文件

rsync 过滤器:未找到过滤文件

编写了一个 shell 脚本来帮助我部署网站。一切终于按预期完成,但 rsync 命令却无法工作。

rsync --chmod="ug+rwx" -e="ssh" --filter="merge '/.deploy/filters'" --dry-run "/var/www/vhosts/staging/myhost.com/httpdocs/" "[email protected]:/var/www/vhosts/myhost.com/domains/myhost.com/httpdocs"

给出:
rsync: failed to open exclude file '/.deploy/filters': No such file or directory (2)

将过滤文件路径更改为完整(相对于根目录)不能解决问题;只有报告的错误中的路径会发生变化:

--filter="merge /.deploy/filters"  

给出:
invalid modifier sequence at 'd' in filter rule: .deploy

非常令人沮丧和气馁。请问有人能解释一下吗?

更新

我认为我需要澄清一些事情。使用--filter="merge 'path'"不带单引号的总是会出现invalid modifier sequence错误。

--filter="merge '/relative/to/rsync/root/path'"

给出no such file or directory错误,以及使用

--filter="merge '/relative/to/rsync/root/path'"

--filter="merge '/absolute/path'"

--filter="merge 'relative/path'"

答案1

事情是这样的...

如果与单引号一起使用,它们将被逐字解释为文件名的一部分(如@reinierpost 所建议的那样)。如果不使用,则文件.deploy/filters将被读取和解析。但是,该文件包含 1 行(我在原始描述中没有提到):

.deploy

所抱怨的是该规则rsync,而不是原始过滤文件路径。

因此,确认正确的方法是使用filter不带单引号的参数修饰符值。

相关内容