【SHELL】自动备份脚本

#!/bin/bash
# Auto Backup Linux System Files

# 颜色定义
GREEN='\033[32;1m'
RED='\033[31;1m'
NC='\033[0m'  # 恢复默认颜色

# 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
    echo -e "${RED}错误: 请使用root权限运行此脚本${NC}"
    exit 1
fi

# 源目录列表
SOURCE_DIR=("$@")

# 目标备份目录
TARGET_DIR="/data/backup/"
YEAR=$(date +%Y)
MONTH=$(date +%m)
DAY=$(date +%d)
WEEK=$(date +%u)  # 1-7,7表示周日
A_NAME=$(date +%H%M)  # 小时分钟,用于增量备份文件名

# 检查是否提供源文件/目录
if [ -z "$*" ]; then
    echo -e "${GREEN}用法:\n请输入要备份的文件或目录\n--------------------------------------------\n\n示例: $0 /boot /etc${NC}"
    exit 1
fi

# 创建目标目录结构
BACKUP_DIR="$TARGET_DIR/$YEAR/$MONTH/$DAY"
if [ ! -d "$BACKUP_DIR" ]; then
    mkdir -p "$BACKUP_DIR"
    echo -e "${GREEN}备份目录 $BACKUP_DIR 创建成功!${NC}"
fi

# 完整备份函数
full_backup() {
    echo -e "${GREEN}执行每周完整备份...${NC}"
    rm -rf "$TARGET_DIR/snapshot"  # 删除旧的快照文件
    
    cd "$BACKUP_DIR" || exit
    tar -g "$TARGET_DIR/snapshot" -czvf "full_system_backup_${YEAR}${MONTH}${DAY}.tgz" "${SOURCE_DIR[@]}"
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}--------------------------------------------\n完整备份成功! 文件位置:${NC}"
        echo -e "${GREEN}$BACKUP_DIR/full_system_backup_${YEAR}${MONTH}${DAY}.tgz${NC}"
    else
        echo -e "${RED}完整备份失败!${NC}"
        exit 1
    fi
}

# 增量备份函数
incremental_backup() {
    echo -e "${GREEN}执行增量备份...${NC}"
    
    cd "$BACKUP_DIR" || exit
    tar -g "$TARGET_DIR/snapshot" -czvf "incr_system_backup_${YEAR}${MONTH}${DAY}_${A_NAME}.tgz" "${SOURCE_DIR[@]}"
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}--------------------------------------------\n增量备份成功! 文件位置:${NC}"
        echo -e "${GREEN}$BACKUP_DIR/incr_system_backup_${YEAR}${MONTH}${DAY}_${A_NAME}.tgz${NC}"
    else
        echo -e "${RED}增量备份失败!${NC}"
        exit 1
    fi
}

# 根据星期几决定执行完整备份还是增量备份
echo "当前时间: $(date)"
echo "备份文件: ${SOURCE_DIR[*]}"

if [ "$WEEK" -eq 7 ]; then
    full_backup
else
    incremental_backup
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值