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 .
|