如何通过保持目录结构完整的rsyncpath匹配模式的文件?

我想将所有文件从服务器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 

我想复制前三个文件的path中的所有commonname到服务器B.我已经花了很多时间find正确的包括/排除模式的rsync但我没有得到它。 以下命令不起作用:

 rsync -a --include='**/commonname/*.foo' --exclude='*' root@1.2.3.4:/var/lib/data /var/lib/data 

我要么太多或太less的文件。 我怎样才能只同步文件path中的commonname

Solutions Collecting From Web of "如何通过保持目录结构完整的rsyncpath匹配模式的文件?"

我想你正在寻找这个:

 rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' root@1.2.3.4:/var/lib/data /var/lib/data 

你的命令有两个不同之处:

  • 最重要的是--include='*/' 。 没有这个,就像你指定的--exclude='*'rsync永远不会进入子目录,因为一切都被排除了。 用--include='*/' ,子目录不会被排除,所以rsync可以愉快地递归。
  • 最不重要的是-m :这会修剪空的目录。 没有这个,你也会得到(空)子目录/var/lib/data/sub3/sub4/differentname/ copied。