我在从 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 就会启动,因为目标端没有在从源端传输的文件列表中看到它。