周五备份,其他几天全量备份,保留七天的备份,因为增量备份是基于全量备份,所以有增量依赖的全量备份是不能删除的

#!/bin/bash

 

# 备份清理策略:

# 1. 每周五生成全量备份(目录名前8位为YYYYMMDD)

# 2. 其他日子生成增量备份

# 3. 清理超过7天的备份目录

# 4. 保留所有7天内增量备份依赖的全量备份

 

# 获取7天前的日期(YYYYMMDD格式)

seven_days_ago=$(date -d "7 days ago" +%Y%m%d)

 

# 查找所有备份目录(以8位数字开头的目录)

find . -maxdepth 1 -type d -name '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*' | while read -r dir; do

    # 提取目录名前8位日期部分

    dirname=$(basename "$dir")

    dir_date=${dirname:0:8}

    

    # 跳过7天内的目录(无论类型都保留)

    if [[ "$dir_date" -ge "$seven_days_ago" ]]; then

        echo "保留: $dirname (7天内)"

        continue

    fi

    

    # 获取该目录创建日期是星期几(0=周日, 5=周五)

    weekday=$(date -d "$dir_date" +%w 2>/dev/null)

    

    if [[ $? -ne 0 ]]; then

        echo "警告: 跳过无效日期目录 $dirname"

        continue

    fi

    

    # 处理全量备份目录(周五创建的)

    if [[ "$weekday" == "5" ]]; then

        # 检查是否有依赖此全量备份的增量备份

        has_dependent=false

        

        # 查找此全量备份之后7天内的增量备份

        for i in {1..6}; do

            check_date=$(date -d "$dir_date +$i days" +%Y%m%d)

            

            # 检查是否有以该日期开头的增量备份目录

            if [[ "$check_date" -ge "$seven_days_ago" ]] && compgen -G "${check_date}*" > /dev/null; then

                echo "保留全量: $dirname (被增量备份 ${check_date}* 依赖)"

                has_dependent=true

                break

            fi

        done

        

        # 没有依赖的增量备份,可以安全删除

        if ! $has_dependent; then

            echo "删除全量备份: $dirname"

            rm -rf "$dir"

        fi

    

    # 处理增量备份目录(非周五创建)

    else

        # 查找对应的全量备份(上周五)

        # 计算当前日期是周几(0=周日,1=周一...6=周六)

        # 计算到上周五的天数偏移

        offset=$(( (weekday + 2) % 7 ))

        last_friday=$(date -d "$dir_date -${offset} days" +%Y%m%d 2>/dev/null)

        

        # 检查对应的全量备份目录是否存在

        if compgen -G "${last_friday}*" > /dev/null; then

            echo "保留增量: $dirname (依赖全量备份 ${last_friday}*)"

        else

            echo "删除增量备份: $dirname (缺少全量备份)"

            rm -rf "$dir"

        fi

    fi

done

 

 

 

 

 

 

posted on 2025-08-04 13:55  我有我的信仰  阅读(24)  评论(0)    收藏  举报