当前位置:首页>Linux>Linux保持目录占用不超过20GB的shell

Linux保持目录占用不超过20GB的shell

  • 2026-10-07 19:21:18
Linux保持目录占用不超过20GB的shell
cat clean_save.sh
#!/bin/bash

# 配置

BASE_DIR="/path/to"                

MAX_SIZE=$((20 * 1024 * 1024 * 1024))   # 20GB(字节)

TARGET_SIZE=$((19 * 1024 * 1024 * 1024)) # 目标剩余19GB

LOCK_FILE="$BASE_DIR/clean_xdt_all.lock"

# 避免重复执行

exec 9>"$LOCK_FILE"

if ! flock -n 9; then

    echo "另一个实例正在运行,退出"

    exit 1

fi

# 遍历 s01 到 s07

for i in {01..07}; do

    XDT_DIR="${BASE_DIR}/s${i}/ds/xdt"

    # 检查目录是否存在

    if [ ! -d "$XDT_DIR" ]; then

        echo "目录 $XDT_DIR 不存在,跳过"

        continue

    fi

    echo "处理目录: $XDT_DIR"

    # 获取当前目录总大小(字节)

    current_size=$(du -sb "$XDT_DIR" | cut -f1)

    # 如果超过阈值,开始清理

    if [ "$current_size" -gt "$MAX_SIZE" ]; then

        echo "  当前大小 $current_size 超过阈值 $MAX_SIZE,开始清理最老文件"

        while [ "$current_size" -gt "$TARGET_SIZE" ]; do

            # 找到最老的 .xdt 文件(按修改时间)

            oldest_file=$(find "$XDT_DIR" -type f -name "*.xdt" -printf "%T@ %p\n" 2>/dev/null | sort -n | head -1 | cut -d' ' -f2-)

            if [ -z "$oldest_file" ]; then

                echo "  没有找到 .xdt 文件,退出当前目录清理"

                break

            fi

            echo "  删除最老文件: $oldest_file"

            rm -f "$oldest_file"

            # 重新计算当前大小

            current_size=$(du -sb "$XDT_DIR" | cut -f1)

        done

        echo "  清理完成,当前大小: $current_size"

    else

        echo "  当前大小 $current_size 正常,无需清理"

    fi

done

# 释放锁

flock -u 9

最新文章

随机文章