我想将所有文件从服务器 A 复制到服务器 B,这些文件在不同级别的文件系统层次结构中具有相同的父目录名称,例如:
/var/lib/data/sub1/sub2/commonname/filetobecopied.foo
/var/lib/data/sub1/sub3/commonname/filetobecopied.foo
/var/lib/data/sub2/sub4/commonname/anotherfiletobecopied.foo
/var/lib/data/sub3/sub4/differentname/fileNOTtobecopied.foo
我想复制前三个文件,它们都有commonname
在服务器 B 的路径中。我已经花了很多时间来寻找正确的包含/排除模式rsync
但我不明白。以下命令不起作用:
rsync -a --include='**/commonname/*.foo' --exclude='*' [email protected] /cdn-cgi/l/email-protection:/var/lib/data /var/lib/data
我要么匹配太多文件,要么匹配很少的文件。如何仅同步文件commonname
在它的路径上?
我猜你正在寻找这个:
rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' [email protected] /cdn-cgi/l/email-protection:/var/lib/data /var/lib/data
您的命令有 2 个差异:
- 最重要的是
--include='*/'
。没有这个,正如你所指定的--exclude='*'
, rsync
永远不会进入子目录,因为所有内容都被排除在外。和--include='*/'
,子目录不再被排除,所以rsync
可以愉快地递归。
- 最不重要的是
-m
:这会修剪空目录。如果没有这个,您还会得到(空)子目录/var/lib/data/sub3/sub4/differentname/
copied.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)