You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash脚本递增setup.cfg中[metadata]的次版本号

批量递增setup.cfg中[metadata]段次版本号的Bash脚本

以下是直接可用的脚本,专门处理setup.cfg文件中[metadata]段内的次版本号递增(如1.2.3→1.3.3),兼容version、=与版本号间的任意空格,且不会改动其他段的版本号:

#!/bin/bash

# 遍历当前目录及子目录下所有setup.cfg文件
for cfg in $(find . -name "setup.cfg"); do
    # 提取[metadata]段的版本号
    current_version=$(awk -F '=' '
        in_metadata == 1 && /^[[:space:]]*version/ {
            gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2)
            print $2
            exit
        }
        /^\[metadata\]/ { in_metadata = 1 }
        /^\[/ && in_metadata == 1 && !/^\[metadata\]/ { exit }
    ' "$cfg")

    if [ -z "$current_version" ]; then
        echo "跳过 $cfg:[metadata]段未找到version项"
        continue
    fi

    # 校验并拆分版本号(仅处理x.y.z格式)
    if [[ $current_version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
        major=${BASH_REMATCH[1]}
        minor=$(( ${BASH_REMATCH[2]} + 1 ))
        patch=${BASH_REMATCH[3]}
        new_version="${major}.${minor}.${patch}"

        # 替换[metadata]段内的版本号,生成备份文件(.bak后缀)
        sed -i.bak -e '/^\[metadata\]/,/^\[/ {
            s/^\([[:space:]]*version[[:space:]]*=[[:space:]]*\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1'"$new_version"'/
        }' "$cfg"

        # 删除备份文件(若需要保留验证可注释此行)
        rm "${cfg}.bak"
        echo "已更新 $cfg:$current_version → $new_version"
    else
        echo "跳过 $cfg:版本号格式无效 '$current_version'(需符合major.minor.patch)"
    fi
done

关键细节说明

  • 精准定位段范围:用awk锁定[metadata]起始到下一个段开头的区间,仅处理该范围内的version项
  • 空格兼容处理:正则中用[[:space:]]*匹配任意数量空格,适配version=1.2.3、version = 1.2.3等所有格式
  • 版本号递增逻辑:通过Bash正则拆分主版本、次版本、修订号,仅对次版本号执行加1操作
  • 安全修改机制:sed -i.bak会生成原文件的备份(后缀.bak),确认修改正确后可删除备份

使用方法

  1. 将脚本保存为bump_minor_version.sh
  2. 赋予执行权限:chmod +x bump_minor_version.sh
  3. 在项目根目录运行脚本:./bump_minor_version.sh

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:17:35