[英]rsync exclude/include odd behaviour
我们有位于Tomcat服务器/opt/tomcat7.0
我想只同步logs
目录到远程服务器,我想下面rsync
命令排除*
的一切,包括logs
但它并没有同步什么。
以下是tomcat目录(我只想同步logs
目录)
[rsync@server1]$ ls /opt/tomcat7.0
bin/ conf/ lib/ logs/ temp/ webapps/ work/
这是rsync命令
[rsync@logserver]$ rsync -avz --delete --copy-links --include='logs' --exclude='*' server1:/opt/tomcat7.0 /path/to/destination/.
receiving incremental file list
sent 25 bytes received 10 bytes 6.36 bytes/sec
total size is 0 speedup is 0.00
我究竟做错了什么?
任何不这样做的理由:
rsync -avz --delete --copy-links server1:/opt/tomcat7.0/logs /path/to/destination/.
该手册页解释了为什么此方法不起作用以及如何使它起作用:
Note that, when using the --recursive (-r) option (which is implied by -a), every subcomponent of every path
is visited from the top down, so include/exclude patterns get applied recursively to each subcomponent's full
name (e.g. to include "/foo/bar/baz" the subcomponents "/foo" and "/foo/bar" must not be excluded). The
exclude patterns actually short-circuit the directory traversal stage when rsync finds the files to send. If
a pattern excludes a particular parent directory, it can render a deeper include pattern ineffectual because
rsync did not descend through that excluded section of the hierarchy. This is particularly important when
using a trailing '*' rule. For instance, this won't work:
+ /some/path/this-file-will-not-be-found
+ /file-is-included
- *
This fails because the parent directory "some" is excluded by the '*' rule, so rsync never visits any of the
files in the "some" or "some/path" directories. One solution is to ask for all directories in the hierarchy
to be included by using a single rule: "+ */" (put it somewhere before the "- *" rule), and perhaps use the
--prune-empty-dirs option. Another solution is to add specific include rules for all the parent dirs that
need to be visited. For instance, this set of rules works fine:
+ /some/
+ /some/path/
+ /some/path/this-file-is-found
+ /file-also-included
- *
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.