rsync 正在删除排除的文件

rsync 正在删除排除的文件

我在从 rsync 中排除文件时遇到问题。有问题的文件是一个特定于其所在机器的配置文件,因此我的开发机器上有一个版本,生产机器上有另一个版本。

我可以让它与命令行上的排除一起使用,但我更愿意让它与每个目录的规则文件一起使用。

所以给出这个精简的例子:

/mydir/
/mydir/foo/
/mydir/foo/bar.txt                <-- this is the config. file
/mydir/foo/baz.txt
/mydir/foo/.rsync-filter

其中 .rsync-filter 包含:

- bar.txt

使用 mydir 父级的工作目录,我尝试 rsync:

$ rsync -rptFvv --delete mydir/ remote.example.com:/home/pryan/temp/rsynctest/
opening connection using: ssh remote.example.com rsync --server -vvtpre.iLs --delete . /home/pryan/temp/rsynctest/  (8 args)
sending incremental file list
[sender] hiding file foo/.rsync-filter because of pattern .rsync-filter [per-dir .rsync-filter]
[sender] hiding file foo/bar.txt because of pattern bar.txt [per-dir .rsync-filter]
delta-transmission enabled
foo/
deleting foo/bar.txt
foo/baz.txt is uptodate
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 119 bytes  received 107 bytes  90.40 bytes/sec
total size is 4  speedup is 0.02

显然,它阅读 .rsync-filter 规则,因为它说它是“隐藏 foo/bar.txt”,但我的印象是 a - 意味着排除,这意味着隐藏和保护。

我相当确定这将是一件愚蠢的事情(就我而言),所以放轻松——我已经准备好,等着踢自己了! :D

更新:忘了提及,本地我正在运行 rsync 3.1.0(在 Ubuntu 14.04 上),远程是 rsync 3.0.9(在 Debian 7 上)。

答案1

您需要在 .rsync 过滤器中使用 P 来保护,而不是使用 - 来排除。在过滤器中将其排除意味着它不会在源端被查找,然后 --delete 就会启动,因为目标端没有在从源端传输的文件列表中看到它。

相关内容