50 lines
1.7 KiB
Bash
50 lines
1.7 KiB
Bash
|
|
set -e
|
|||
|
|
shopt -s nullglob
|
|||
|
|
KEEP=5
|
|||
|
|
# glob 字符类只匹配严格的 backup-YYYYMMDD-HHMMSS;nullglob 让无匹配时展开为空数组。
|
|||
|
|
# glob 结果按字典序排列,对该命名格式而言等价于时间戳升序(最早的在前)。
|
|||
|
|
rollbacks=()
|
|||
|
|
for p in /data/pms/backup-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]; do
|
|||
|
|
if [ -d "$p" ]; then
|
|||
|
|
rollbacks+=( "$p" )
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
total=${#rollbacks[@]}
|
|||
|
|
echo " 当前回滚点 $total 个(deploy 会为每次部署新建一份):"
|
|||
|
|
for p in "${rollbacks[@]}"; do
|
|||
|
|
echo " $p"
|
|||
|
|
done
|
|||
|
|
if [ "$total" -gt "$KEEP" ]; then
|
|||
|
|
drop=$((total - KEEP))
|
|||
|
|
echo " 将删除最早的 $drop 个(保留最近 $KEEP 个):"
|
|||
|
|
i=0
|
|||
|
|
for p in "${rollbacks[@]}"; do
|
|||
|
|
if [ "$i" -ge "$drop" ]; then
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
i=$((i + 1))
|
|||
|
|
# 复核:名字必须严格符合 backup-YYYYMMDD-HHMMSS,否则拒绝删除(绝不碰其它目录)
|
|||
|
|
case "$(basename "$p")" in
|
|||
|
|
backup-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9])
|
|||
|
|
echo " 删除 $p"
|
|||
|
|
rm -rf -- "$p"
|
|||
|
|
;;
|
|||
|
|
*)
|
|||
|
|
echo " [skip] 名字不符合回滚点模式,拒绝删除: $p"
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
done
|
|||
|
|
else
|
|||
|
|
echo " 回滚点数量未超过 $KEEP,无需清理"
|
|||
|
|
fi
|
|||
|
|
kept=()
|
|||
|
|
for p in /data/pms/backup-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]; do
|
|||
|
|
if [ -d "$p" ]; then
|
|||
|
|
kept+=( "$p" )
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
echo " 清理后保留的回滚点 ${#kept[@]} 个:"
|
|||
|
|
for p in "${kept[@]}"; do
|
|||
|
|
echo " $p"
|
|||
|
|
done
|
|||
|
|
echo " /data/pms 占用: $(du -sh /data/pms | cut -f1)"
|