2012-07-23, 15:42 | #1 (permalink) |
版主
注册日期: 2012-02-07
帖子: 281
|
linux用rsync实现文档自动备份功能
#!/bin/bash
mydate="`date '+%Y%m%d.%H%M'`" # Define rmt location RmtUser=root #RmtHost=192.168.0.55 #RmtPath=/home/ #BackupSource="${RmtUser}@${RmtHost}:${RmtPath}" BackupSource="/home/accounts" # 若进行本地备份则用本地路径替换上面的行 # Define location of backup #BackupRoot="/backups/$RmtHost/" BackupRoot="/root" # 若进行本地备份则用本地路径替换上面的行 LogFile="${BackupRoot}/backup.log" ExcludeList="/root/exclude-list.txt" #ExcludeList="/root/backup/backup-exclude-list.txt" BackupName='domains' BackupNum="7" # 指定保留多少个增量备份(适用于每周生成归档文件) #BackupNum="31" # 指定保留多少个增量备份(适用于每月生成归档文件) # 定义函数检查目录 $1 是否存在,若不存在创建之 checkDir() { if [ ! -d "${BackupRoot}/$1" ] ; then mkdir -p "${BackupRoot}/$1" fi } # 定义函数实现目录滚动 # $1 -> 备份路径 # $2 -> 备份名称 # $3 -> 增量备份的数量 rotateDir() { for i in `seq $(($3 - 1)) -1 1` do if [ -d "$1/$2.$i" ] ; then /bin/rm -rf "$1/$2.$((i + 1))" mv "$1/$2.$i" "$1/$2.$((i + 1))" fi done } # 调用函数 checkDir ,确保目录存在 checkDir "archive" checkDir "daily" #======= Backup Begin ================= # S1: Rotate daily. rotateDir "${BackupRoot}/daily" "$BackupName" "$BackupNum" checkDir "daily/${BackupName}.0/" checkDir "daily/${BackupName}.1/" mv ${LogFile} ${BackupRoot}/daily/${BackupName}.1/ cat >> ${LogFile} <<_EOF =========================================== Backup done on: $mydate =========================================== _EOF # S2: Do the backup and save difference in ${BackupName}.1 rsync -avzP --delete \ -b --backup-dir=${BackupRoot}/daily/${BackupName}.1 \ --exclude-from=${ExcludeList} \ $BackupSource ${BackupRoot}/daily/${BackupName}.0 \ 1>> ${LogFile} 2>&1 # S3: Create an archive backup every week if [ `date +%w` == "0" ] # 每周日做归档 # if [ `date +%d` == "01" ] # 每月1日做归档 #then tar -cjf ${BackupRoot}/archive/${BackupName}-${mydate}.tar.bz2 \ -C ${BackupRoot}/daily/${BackupName}.0 . |