#!/bin/bash

# 宝塔面板计划任务添加指令
# /bin/bash /root/pk.sh

# 目标清理目录
TARGET_DIR="/www/wwwroot/AliPack/QJB/storage"

# 安全防护：防止误删重要目录
check_directory() {
    local unsafe_dirs=("/" "/bin" "/boot" "/dev" "/etc" "/home" "/lib" "/proc" 
                      "/root" "/sbin" "/sys" "/usr" "/var" "/www/server")
    
    # 检查空目录
    if [[ -z "$TARGET_DIR" ]]; then
        echo "错误: 目录为空!"
        exit 1
    fi
    
    # 检查是否在危险目录列表中
    for unsafe in "${unsafe_dirs[@]}"; do
        if [[ "$TARGET_DIR" == "$unsafe" || "$TARGET_DIR" == "$unsafe"/* ]]; then
            echo "危险操作: 禁止清理系统目录 '$TARGET_DIR'!"
            exit 1
        fi
    done
    
    # 检查目录是否存在
    if [[ ! -d "$TARGET_DIR" ]]; then
        echo "错误: 目录 '$TARGET_DIR' 不存在!"
        exit 1
    fi
}

# 计算目录大小
get_dir_size() {
    local dir="$1"
    if [[ -d "$dir" ]]; then
        du -sb "$dir" 2>/dev/null | awk '{print $1}'
    else
        echo "0"
    fi
}

# 格式化文件大小
format_size() {
    local size=$1
    if [[ $size -ge 1073741824 ]]; then
        echo "$(echo "scale=2; $size/1073741824" | bc) GB"
    elif [[ $size -ge 1048576 ]]; then
        echo "$(echo "scale=2; $size/1048576" | bc) MB"
    elif [[ $size -ge 1024 ]]; then
        echo "$(echo "scale=2; $size/1024" | bc) KB"
    else
        echo "${size} B"
    fi
}

# 主清理函数
clean_directory() {
    echo "开始清理任务 - $(date '+%Y-%m-%d %H:%M:%S')"
    echo "清理目录: $TARGET_DIR"
    
    # 获取清理前目录信息
    pre_clean_size=$(get_dir_size "$TARGET_DIR")
    echo "清理前大小: $(format_size $pre_clean_size)"
    
    # 执行清理 - 删除目录下的所有内容但保留目录本身
    echo "正在清理目录内容..."
    find "$TARGET_DIR" -mindepth 1 -delete 2>/dev/null
    
    # 获取清理后目录信息
    post_clean_size=$(get_dir_size "$TARGET_DIR")
    freed_space=$((pre_clean_size - post_clean_size))
    
    echo "清理完成!"
    echo "释放空间: $(format_size $freed_space)"
    echo "剩余大小: $(format_size $post_clean_size)"
    echo "清理完成时间: $(date '+%Y-%m-%d %H:%M:%S')"
}

# 主函数
main() {
    local start_time=$(date +%s)
    
    # 检查目录安全性
    check_directory
    
    # 执行清理
    clean_directory
    
    local end_time=$(date +%s)
    local duration=$((end_time - start_time))
    echo "执行时间: ${duration} 秒"
}

# 执行主函数
main "$@"