shell按规则保留最新的几个站点版本目录

来源:赵克立博客 分类: Linux 标签:shell发布时间:2022-10-01 15:23:54最后更新:2025-03-05 10:55:31浏览:934
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2025-03-05 10:55:31
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
# 保留站点最近部署的3个版本目录,目录规则为xxxx-xxx-xxx-2.0.10
clearInvalidSite () {
    # 目录路径
    base_dir="/www"  # 根据你的实际路径修改

    # 遍历每个站点
    for ver in "xxx-xxx-xxx" "aaa-aaa-aaa"
    do
        # 获取该站点所有符合格式的版本目录
        versionList=$(ls ${base_dir} | grep "^${ver}-[0-9]\+\.[0-9]\+\.[0-9]\+$")

        # 用来存储版本和其对应的排序后的数字
        versionNumbers=()

        # 遍历每个版本
        for version in $versionList
        do
            # 从版本名称中提取出数字部分,去掉点并补充为5位数
            versionWithoutDot=$(echo $version | sed -E 's/[^0-9]//g')  # 提取数字部分
            versionParts=$(echo $version | sed -E 's/[^0-9\.]//g' | tr '.' ' ')  # 版本号的各部分
            versionFormatted=""
            for part in $versionParts; do
                # 补充每部分为5位数字
                versionFormatted+=$(printf "%05d" $part)
            done
            
            # 保存版本名称和对应的排序后的数字
            versionNumbers+=("$versionFormatted:$version")
        done

        # 按照数字部分(即 versionFormatted)降序排序
        sortedVersions=$(for item in "${versionNumbers[@]}"; do echo $item; done | sort -nr | cut -d: -f2)

        # 计数器,用于保留最新的3个版本
        i=0

        # 遍历排序后的版本列表
        for version in $sortedVersions
        do
            i=$((i+1))  # 版本计数器递增

            # 保留最新的3个版本
            if [[ ${i} -le 3 ]]; then
                echo "retain ${base_dir}/${version}"
            else
                # 删除旧版本
                echo "deleted ${base_dir}/${version}"
                # 你可以取消注释以下代码来执行删除操作
                # rm -rf ${base_dir}/${version}
                # docker stop $version
                # docker rm $version
            fi
        done
    done
}

clearInvalidSite

输出结果为

2210151665822761271169.png


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python