#!/bin/bash # 数据备份脚本 # 用于备份重要数据 # 获取脚本所在目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" cd "$PROJECT_DIR" echo "==========================================" echo "开始备份: $(date '+%Y-%m-%d %H:%M:%S')" echo "==========================================" # 配置 BACKUP_DIR="${PROJECT_DIR}/backups" DATE=$(date +"%Y%m%d_%H%M%S") KEEP_DAYS=30 # 创建备份目录 mkdir -p "$BACKUP_DIR" echo "备份目录: $BACKUP_DIR" echo "备份日期: $DATE" echo "" # 1. 备份数据目录 echo "[1/3] 备份数据目录..." if [ -d "data" ]; then DATA_BACKUP_FILE="${BACKUP_DIR}/data_${DATE}.tar.gz" tar -czf "$DATA_BACKUP_FILE" data/ echo "✅ 数据备份完成: $DATA_BACKUP_FILE" echo " 文件大小: $(du -h "$DATA_BACKUP_FILE" | cut -f1)" else echo "⚠️ data目录不存在,跳过数据备份" fi # 2. 备份日志目录(可选) echo "" echo "[2/3] 备份日志目录..." if [ -d "logs" ]; then LOGS_BACKUP_FILE="${BACKUP_DIR}/logs_${DATE}.tar.gz" tar -czf "$LOGS_BACKUP_FILE" logs/ echo "✅ 日志备份完成: $LOGS_BACKUP_FILE" echo " 文件大小: $(du -h "$LOGS_BACKUP_FILE" | cut -f1)" else echo "⚠️ logs目录不存在,跳过日志备份" fi # 3. 清理旧备份 echo "" echo "[3/3] 清理${KEEP_DAYS}天前的旧备份..." OLD_BACKUPS=$(find "$BACKUP_DIR" -name "*.tar.gz" -mtime +${KEEP_DAYS} -print | wc -l) if [ "$OLD_BACKUPS" -gt 0 ]; then find "$BACKUP_DIR" -name "*.tar.gz" -mtime +${KEEP_DAYS} -delete echo "✅ 已删除 ${OLD_BACKUPS} 个旧备份文件" else echo "✅ 没有需要清理的旧备份" fi # 统计 echo "" echo "==========================================" echo "备份完成: $(date '+%Y-%m-%d %H:%M:%S')" echo "备份文件数量: $(ls -1 "$BACKUP_DIR"/*.tar.gz 2>/dev/null | wc -l)" echo "总备份大小: $(du -sh "$BACKUP_DIR" 2>/dev/null | cut -f1)" echo "==========================================" echo "" echo "✅ 备份任务完成!" exit 0