#!/bin/bash
KEEP=3  # 保留最新3个版本

# 提取所有RPM包的「基础名」（去掉版本号、架构、.rpm后缀）
# 例如：kernel-3.10.0-1160.el7.x86_64.rpm → kernel
for pkg in *.rpm; do
    # 提取基础名（用"-"分割，最后2段是版本+架构，前面是基础名）
    base_name=$(echo $pkg | sed -r 's/-(.+)-(.+)\.rpm$//')
    echo $base_name >> /tmp/all_base_names.txt
done

# 去重，得到所有唯一的包名
sort -u /tmp/all_base_names.txt > /tmp/unique_base_names.txt

# 遍历每个包名，筛选并删除旧版本
while read base; do
    # 找到该包的所有RPM，按版本号倒序排序（最新的在前面）
    rpms=($(ls -1v ${base}-*.rpm | sort -Vr))  # -Vr 按版本号倒序
    
    # 如果包的数量超过保留数，删除多余的旧版本
    if [ ${#rpms[@]} -gt $KEEP ]; then
        echo "=== 清理包: $base（共${#rpms[@]}个版本，保留前$KEEP个）==="
        # 取第 KEEP+1 个及以后的包（旧版本），执行删除
        for old_rpm in "${rpms[@]:$KEEP}"; do
            echo "删除旧包: $old_rpm"
            rm -f "$old_rpm"
        done
        echo ""
    fi
done < /tmp/unique_base_names.txt

# 清理临时文件
rm -f /tmp/all_base_names.txt /tmp/unique_base_names.txt
echo "清理完成！"
