用递归方法扫描 SVN 仓库下载符合条件的文件

最近在做一个自动化测试工具,需要对一组程序进行测试确认,而这组程序有多个不同平台的版本,而且后续可能会更新。自然地,就想到在执行测试时从 SVN 存放位置拉取对应的下来进行测试。但 SVN 客户端移植到嵌入式系统是一个问题,问题二是 SVN 客户端的授权问题自动化处理不好弄。于是退而求其次,制作一个脚本方便地拉取到 Ubuntu 然后自动化传送到嵌入式板卡执行测试。

以下分享其中一段的实现,采用了递归的方法扫描特定 SVN 路径下的所有文件,把属于指定平台的程序 export 下来。是的,Bash 也支持递归。

这段代码有几点需要注意:

  • 第 3 行,影响 for 循环从数组中提取文件名,如果不配置这个换行,文件名中存在空格的情况将会出错。一个文件名被分割为两个数组元素了。
  • 递归函数内部用到的变量都需要声明为 local,因为默认都是全局的,在递归中将会被重复修改,出现问题。
  • 使用 svn 的 list 子命令进行查询扫描,使用 export 子命令进行文件下载。
#!/bin/bash
set -e
IFS=$'\n'

DEMOS_URL="https://192.168.xxx.xxx/xxx/2-demos"

function list() {
    local URL=$1
    local DIRS=$(svn list ${URL})
    for dir in ${DIRS[*]}; do
        if echo ${dir} | grep "am437x$" > /dev/null;then
            echo "Exporting ${dir}..."
            svn export ${URL}/${dir}
        fi

        # Check if a directory end with '/'.
        if echo ${dir} | grep "\/$" > /dev/null;then
            local NEW_URL="${URL}/${dir}"
            list ${NEW_URL}
        fi
    done
}

list ${DEMOS_URL}

2020年2月20日

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页