编写了一个 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
不带单引号的参数修饰符值。