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输出结果为
