# 配置
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