带有正则表达式的 Rsync 文件

Rsync file with regex

somehost中的文件夹如下

/strbase/logs/service

在众多文件中有以下文件:

service.fix.20151109.log.gz

我想使用 rsync 将此文件传输到我的本地主目录,但我必须使用正则表达式

^service\.fix\.20151109\.log\.gz$

这根据 regex101.com 工作。

我尝试了以下命令,但没有传输任何内容。

/usr/local/bin/rsync -a --bwlimit=1333 --include="^service\.fix\.20151109\.log\.gz$" --exclude="*" --rsync-path=/usr/bin/rsync somehostname:/strbase/logs/service ~

我错过了什么?

两件事。

首先,你的过滤器规格有误,应该是:

--include="service.fix.20151109.log.gz"

rsync 不使用正则表达式(它使用手册页中描述的模式),默认情况下从字符串的开头到结尾匹配。

其次,--exclude="*" 完全隐藏文件夹 /service,它是要包含的文件的父文件夹。它应该是 exclude=/strbase/logs/service/* 而不是。


最终命令应如下所示:

/usr/local/bin/rsync -a --bwlimit=1333 \
   --include="/strbase/logs/service/service.fix.20151109.log.gz" \
   --exclude="*" \
   --rsync-path=/usr/bin/rsync \
   somehostname:/strbase/logs/service ~

但是,这对于演示问题是有意义的。在现实生活中,我会简单地 rsync 那个单个文件,就像这样:

rsync -a server:/path/to/file ~

虽然它没有回答如何将 rsync 与正则表达式一起使用的原始问题,但要传输文件 service.fix.20151109.log.gz 我使用了:

/usr/local/bin/rsync -a --bwlimit=1333 --rsync-path=/usr/bin/rsync somehostname:/strbase/logs/service/service.fix.20151109.log.gz ~

我把include和exclude去掉了。