rsync:如何包含名称以特定字符串结尾的文件

Ska*_*ren 5 find rsync

可能的重复:
Rsync 过滤器:仅复制一种模式

我想使用 rsync 从具有特定结束字符串的服务器(或 server-via-ssh)传输所有文件,例如像tar.gz. 无论他们现在或将来会走多远,我都想要它们。但这不仅仅是扩展。在一种情况下,我想获取所有以-server-cloudimg-amd64-root.tar.gz. 同样重要的是,我根本不想获取任何其他文件,即使它们位于较浅的路径中。

简单的情况下--include="**/*-server-cloudimg-amd64-root.tar.gz不会得到它们。我知道 rsync 包含/排除并不简单,没想到它会起作用。我知道有些需要指定要传输的目录。但是 rsync 的逻辑对我来说一直是个谜(不像我见过的任何路径 ACL 规则),因为它也需要单独匹配父目录。我认为所需要的只是一个带有语义的选项,即“如果此文件匹配,则包括所有必要的目录以使其传输而不暗示任何其他匹配”,其方式与该命令mkdir -p ${DIRNAME}将创建命名目录的父目录大致相同需要。我在 rsync 中看不到这样的选项。是否有一些直接的方法可以一次性完成此操作?

Paw*_*ian 9

在这种情况下,当您无法物理访问远程服务器时,您必须与所有这些包括和排除联系。这里有一篇很棒的帖子,关于 SE(见特色答案):

Rsync 过滤器:仅复制一种模式

我认为你需要类似的东西

rsync -am --include='*.tar.gz' --include='*/' --exclude='*' SOURCE DESTINATION
Run Code Online (Sandbox Code Playgroud)