rsync 一定数量的子目录

rsync 一定数量的子目录

我目前正在将我们公司的近 80 台 Jenkins 服务器迁移到一台 Jenkins 服务器。我已经弄清楚了迁移作业后将出现什么情况,但事实证明,迁移作业有些困难。

我目前有一个 rsync 命令,它可以拉取所有作业并构建并且运行良好,但这在臃肿的服务器上不再可行:

sshpass -p '*****' \
rsync -rmvptgolD \
--exclude='*/archive/*' \
--include='legacyIds' \
--include='nextBuildNumber' \
--include='last*Build' \
--include='log' \
--include='*.txt' \
--include='*.html' \
--include='build.xml' \
--include='changelog.xml' \
--include='config.xml' \
--include='*/' \
--exclude='*' \
-e 'ssh -o StrictHostKeyChecking=no -l user' \
user@server:/var/lib/jenkins/jobs/ \
/<destination>/jobs

是的,我知道sshpass这是不安全的,这些服务器是在我之前创建的,我们无法向它们添加密钥以使其成为安全连接,现在我只能停留在部分sshpass

这个 rsync 命令在没有太多作业/构建的 jenkins 服务器上运行得很好,但我遇到的命令迫使我减少那些我们非常确定没人再需要的信息。

我现在遇到过一台服务器,它有超过 5,000 个作业,每个作业有大约 50,000 个构建,这是过度的,因此设定了以下目标

最终目标是复制:

所有作业以及每项作业的最后 10 次构建

或者

所有作业以及每个作业的最后一次失败构建和最后一次成功构建

我的主要问题是,如何添加某种 rsync 过滤器以仅包含最后 10 个子目录?或类似的东西。或者保留符号链接并将其链接复制为单独的实体?

这是 Jenkins 服务器文件夹结构的示例:

jenkins/
  config.xml
  jobs/
    Job1/
      config.xml
      builds/
        1/
          build.xml
          archive/
          log
        2/
          build.xml
          archive/
          log
        3/
          build.xml
          archive/
          log
        4/
          build.xml
          archive/
          log
        n/
          build.xml
          archive/
          log
        lastFailedBuild/ -> 3/
        lastSuccessfulBuild/ -> 4/
    Job2/
      ...

其中 build/[0-9]*/ 目录是 jenkins 中的构建 ID。

任何帮助都将不胜感激,我很快研究了 -L 选项,但它似乎删除了符号链接,-K 和 -k 也是如此

谢谢你!

相关内容