shell按规则保留最新的几个站点版本目录
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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
输出结果为