首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash中使用多个通配符在ssh上进行rsync,同时保持目录结构

在bash中使用多个通配符在ssh上进行rsync,同时保持目录结构
EN

Unix & Linux用户
提问于 2021-07-30 19:22:25
回答 1查看 547关注 0票数 3

我在远程服务器上有一个类似于这样的目录结构,下面列出了一些文件:

代码语言:javascript
复制
/logs/service::A1/20210730T120000/log.log
/logs/service::A1/20210729T120000/log.log
/logs/service::A2/20210730T120000/log.log
/logs/service::B0/20210730T120000/log.log

为了rsync serviceA中的所有文件,我只使用一个通配符*运行以下命令

rsync -av <remote-server>:/logs/service::A* <destination>

这和预期的一样工作,我在目的地得到了以下目录结构:

代码语言:javascript
复制
<destination>/service::A1/20210730T120000/log.log
<destination>/service::A1/20210729T120000/log.log
<destination>/service::A2/20210730T120000/log.log

但是,如果我想从某一天rsync serviceA中的所有文件,我需要第二个通配符,如:rsync -arv <remote-server>:/logs/service::A*/20210730* <destination>

但是,这样我就失去了顶级目录,并在目的地给出了以下结构:

代码语言:javascript
复制
<destination>/20210730T120000/log.log
<destination>/20210730T120000/log.log

我仍然希望在我的目的地的service::<xx>水平。实现这一目标的方法似乎是通过--include/--exclude标志。

不过,我尝试了这里的方法,但没有找到文件:

rsync -av --include='service::A**/20210730**' --exclude='*' <remote-server>:/logs/ <destination>

代码语言:javascript
复制
receiving incremental file list
./
EN

回答 1

Unix & Linux用户

发布于 2021-07-31 06:50:06

您很可能希望使用包含模式/service::A*/20210730*/***/以及排除模式*的组合。您还可能希望包含-m (--prune-empty-dirs),以便只创建保存实际传输的文件所需的目录结构。

代码语言:javascript
复制
rsync -avm \
    --include='/service::A*/20210730*/**' \
    --include='*/' \
    --exclude='*' \
    remote:/logs/ local-path/logs

在传输的文件列表阶段,这将遍历根植于远程主机上的/logs的整个层次结构,包括每个目录(由于*/包含模式)和所有与第一个模式匹配的文件和目录,但不包括任何其他内容。在实际开始传输之前,目录和文件的路径名列表将被删除空目录(“空”表示“不包含与任何包含模式匹配的文件”)。

需要使用*/模式来允许rsync进入匹配的/service::A*等目录,因为否则,由于*排除模式,这是不可能的。

由于上面的解决方案需要对/logs下的所有内容进行完整遍历,如果您有巨大的文件层次结构,这可能会很慢。

如果是这样的话,您可以通过对包含模式进行更多的选择来加快速度:

代码语言:javascript
复制
rsync -avm \
    --include='/service::A*/' \
    --include='/service::A*/20210730*/***' \
    --exclude='*' \
    remote:/logs/ local-path/logs

这显式地允许rsync输入与/service::A*/匹配的目录。然后,它包含我们感兴趣的所有时间戳目录,而不包括其他所有内容。

dir/***这样的模式不同于dir/**,因为前者还包括dir目录本身。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/662672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档