90 lines
2.6 KiB
Bash
90 lines
2.6 KiB
Bash
#!/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 |