如何通过保持目录结构完整来同步路径中具有匹配模式的文件?
How to rsync files with matching pattern in path by keeping directory structure intact?
我想将所有文件从服务器 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。我已经花了很多时间为 [=13= 找到正确的 include/exclude 模式] 但我不明白。以下命令不起作用:
rsync -a --include='**/commonname/*.foo' --exclude='*' root@1.2.3.4:/var/lib/data /var/lib/data
我匹配的文件太多或太少。如何只同步路径中带有 commonname
的文件?
我猜你正在寻找这个:
rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' root@1.2.3.4:/var/lib/data /var/lib/data
您的命令有 2 个不同之处:
- 最重要的是
--include='*/'
。如果没有这个,正如您指定的 --exclude='*'
,rsync
将永远不会进入子目录,因为所有内容都被排除在外。使用 --include='*/'
,子目录不再被排除,因此 rsync
可以愉快地递归。
- 最不重要的是
-m
:这会删除空目录。如果没有这个,您还会复制(空)子目录 /var/lib/data/sub3/sub4/differentname/
。
我想将所有文件从服务器 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。我已经花了很多时间为 [=13= 找到正确的 include/exclude 模式] 但我不明白。以下命令不起作用:
rsync -a --include='**/commonname/*.foo' --exclude='*' root@1.2.3.4:/var/lib/data /var/lib/data
我匹配的文件太多或太少。如何只同步路径中带有 commonname
的文件?
我猜你正在寻找这个:
rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' root@1.2.3.4:/var/lib/data /var/lib/data
您的命令有 2 个不同之处:
- 最重要的是
--include='*/'
。如果没有这个,正如您指定的--exclude='*'
,rsync
将永远不会进入子目录,因为所有内容都被排除在外。使用--include='*/'
,子目录不再被排除,因此rsync
可以愉快地递归。 - 最不重要的是
-m
:这会删除空目录。如果没有这个,您还会复制(空)子目录/var/lib/data/sub3/sub4/differentname/
。