mur*_*rks 19 regex linux bash shell rsync
我想将所有文件从服务器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
Run Code Online (Sandbox Code Playgroud)
我想复制前三个文件都有commonname路径到服务器B.我已经花了很多时间找到正确的包含/排除模式,rsync但我没有得到它.以下命令不起作用:
rsync -a --include='**/commonname/*.foo' --exclude='*' root@1.2.3.4:/var/lib/data /var/lib/data
Run Code Online (Sandbox Code Playgroud)
我要么匹配太多,要么与少数文件匹配.如何仅将文件commonname与其路径中的文件同步?
gni*_*urf 35
我猜你在找这个:
rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' root@1.2.3.4:/var/lib/data /var/lib/data
Run Code Online (Sandbox Code Playgroud)
您的命令有2个不同之处:
--include='*/'.如果没有这个,就像你指定的那样--exclude='*',rsync永远不会进入子目录,因为一切都被排除了.有了--include='*/',子目录不再被排除,所以rsync可以愉快地递归.-m:这会修剪空目录.如果没有这个,你也会/var/lib/data/sub3/sub4/differentname/复制(空)子目录.