我有以下目录:
- 1
- 12
- 123
- 1234567
- 1234566
- 1234555
- 121
我想 rsync 名称恰好为 7 位数字的目录。(即上面列表中的 1234567、1234566 和 1234555)。
这对我有用:
rsync -avu \
--include="[0-9][0-9][0-9][0-9][0-9][0-9][0-9]" \
--exclude='*' \
remote_host:/export/Data/liberty/TestRecords/2025/* \
/export/Data/liberty/TestRecords/2025/
但我有两个限制性事实:
- 如果我的名字变得更长怎么办?那么输入像N次“[0-9]”这样长的正则表达式会很困难。我需要一个类似于使用 grep 和正则表达式的解决方案,其中N是数字的数量;这在我需要时可以非常方便地进行更改。
[0-9]\{N\}
find
我的源是一个远程服务器,因此执行 SSH 或远程机器上的任何命令来返回结果会有些困难且成本更高。
Regex [0-9]{7}
OR[0-9]\{7\}
不适用于--include
。
注意:在@wobtax编辑问题之前,我回答了以下问题,使项目符号“我的源是远程服务器,因此在远程机器上执行 SSH 或任何 find 命令以返回结果会有些困难且成本更高。”清晰可见(它之前被隐藏在代码块中缩进),所以我错过了源文件存储在远程。要执行我下面建议的操作,您需要将其包装在
ssh
脚本中并在远程机器上运行它。Unix查找文件的标准工具是
find
:因此只需使用它来查找您的文件,然后调用
rsync
结果,方法是rsync
调用find
:或者通过管道
find
将输出传输到xargs
调用rsync
:我不太熟悉
rsync
能够满足whatever
您需求的选项,但我希望这对您来说很容易,如果不是很明显的话,也许需要一点反复试验。以下是重复该
[0-9]
字符串 10 次的技巧:带有参数
N
: