commit e4c264b671acac9b490cff358477d7f620a59369 Author: mei Date: Sat Jun 7 08:33:02 2025 +0800 添加 backup.sh diff --git a/backup.sh b/backup.sh new file mode 100644 index 0000000..180e3c5 --- /dev/null +++ b/backup.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +# --- 配置 --- +# 设置要压缩的源目录 +SOURCE_DIR="/opt/mcsmanager/daemon/data/InstanceData" + +# 设置存放压缩包的目标目录 +DEST_DIR="/mnt/sdb1/mc-backup" + +# 设置备份文件的最大保留数量 +MAX_BACKUPS=100 +# --- 配置结束 --- + + +# --- 脚本主体 --- + +# 检查源目录是否存在 +if [ ! -d "$SOURCE_DIR" ]; then + echo "错误: 源目录 '$SOURCE_DIR' 不存在。" + exit 1 +fi + +# 检查目标目录是否存在,如果不存在则创建 +if [ ! -d "$DEST_DIR" ]; then + echo "提示: 目标目录 '$DEST_DIR' 不存在,正在创建..." + mkdir -p "$DEST_DIR" +fi + +# --- 清理旧备份 --- +# 切换到备份目录进行操作 +cd "$DEST_DIR" || exit + +# 获取当前备份文件的数量 +CURRENT_BACKUP_COUNT=$(ls -1q *.tar.gz 2>/dev/null | wc -l) + +echo "当前已有 $CURRENT_BACKUP_COUNT 个备份。最大保留数量为 $MAX_BACKUPS。" + +# 当备份数量大于等于设定的最大值时,循环删除最旧的文件 +while [ "$CURRENT_BACKUP_COUNT" -ge "$MAX_BACKUPS" ]; do + # ls -tr: 按修改时间排序(最旧的在最前) + # head -n 1: 获取列表中的第一个文件(即最旧的文件) + OLDEST_BACKUP=$(ls -tr *.tar.gz | head -n 1) + + if [ -n "$OLDEST_BACKUP" ]; then + echo "备份数量已达上限,正在删除最旧的备份: $OLDEST_BACKUP" + rm -f "$OLDEST_BACKUP" + # 更新文件数量 + CURRENT_BACKUP_COUNT=$((CURRENT_BACKUP_COUNT - 1)) + else + # 如果没有找到匹配的文件,则退出循环 + break + fi +done +# --- 清理完成 --- + + +# --- 创建新备份 --- +# 获取当前时间并格式化为 YYYY-MM-DD_HH-MM-SS +CURRENT_TIME=$(date +"%Y-%m-%d_%H-%M-%S") + +# 定义压缩文件的完整路径和名称 +ARCHIVE_NAME="$CURRENT_TIME.tar.gz" +DEST_FILE="$DEST_DIR/$ARCHIVE_NAME" + +# 获取源目录的基础名称 (例如 /path/to/source -> source) +# 使用 -P 选项可以处理符号链接,确保获取的是实际的目录名 +SOURCE_BASE_NAME=$(basename "$SOURCE_DIR") + +echo "----------------------------------------" +echo "正在创建新备份..." +echo "源目录: $SOURCE_DIR" + +# 执行压缩命令 +# -c: 创建一个新的归档 +# -z: 通过 gzip 进行压缩 +# -v: 显示处理过程中的文件 +# -f: 指定归档文件名 +# -C: 切换到指定目录后再执行操作,避免压缩包中包含完整的父路径 +tar -czvf "$DEST_FILE" -C "$(dirname "$SOURCE_DIR")" "$SOURCE_BASE_NAME" + +echo "----------------------------------------" +if [ $? -eq 0 ]; then + echo "✅ 新备份创建成功!" + echo "备份文件已保存至: $DEST_FILE" +else + echo "❌ 备份创建失败。" +fi +echo "----------------------------------------" + +exit 0 \ No newline at end of file