Chinaunix首页 | 论坛 | 博客
  • 博客访问: 131294
  • 博文数量: 58
  • 博客积分: 1411
  • 博客等级: 上尉
  • 技术积分: 750
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-25 11:41
文章分类
文章存档

2010年(20)

2009年(37)

2008年(1)

我的朋友

分类: LINUX

2010-04-26 08:30:07

有用脚本 2009-05-23 13:00:26 阅读150 评论1 字号:

#!/bin/bash
#好的做法
#根据项目不同来重命名该脚本
#例如 amountebak.sh or pandawillsbak.sh
#该脚本最好放在 $bakpp定义的绝对路径部分
#你可以在$bakpp下找到相应的备份文件
#例如 /usr/backup/amountebak.sh or /usr/backup/pandawillsbak.sh


########## Init Path ########
# 在下面的参数中必须定义的参数有 $bakpp、$project、$projectpp
TAR=/bin/tar
# 存放备份文件的地方,以项目名称区分
bakpp=/usr/backup/"$project"
# 需要备份的文件夹,文件夹的路径
project=test
projectpp=/home/mmroot/zbb/
# parament for varible
ym=`date +%Y%m`
ymd=`date +%Y%m%d`
# 存储备份文件的子目录,以月份区分,他的上级目录是$bakpp定义的
monthbakpp=$bakpp/$ym
gidpp=$monthbakpp
gidshot=gid$project$ym
# 完全备份的文件名
fullname=$ym
# 增量备份的文件名
incrementalname=$ymd
# Record the location of the log
log=$bakpp/$project.log

############ chk_full #######################
# 检查完全备份是否存在,如果不存在就创建它

#this function check fullbackup file exist or not , if not then create fullbackup now

chk_full()
{
if [ -e "$monthbakpp"/"$project"_"$ym"_full.tar.gz ];then
echo ""$project"_"$ym"_full.tar.gz file exist!! ====`date +%Y-%m-%d-%T` " >>$log
else
tar_full
fi
}
######### chk_incremental ########
# 检查增量备份是否存在
chk_incremental()
{
while [ -e "$monthbakpp"/"$project"_"$incrementalname"_incremental.tar.gz ]
do
incrementalname=`echo "$incrementalname + 0.1" | bc `
done
}
######## tar_incremental #######
# 执行增量备份
tar_incremental()
{
cd $projectpp
echo "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$incrementalname"_incremental.tar.gz" >> $log
sleep 3
$TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$incrementalname"_incremental.tar.gz $project
echo "END_TIME========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$incrementalname"_incremental.tar.gz" >> $log
}

######## tar_full ###########
tar_full()
{
touch $gidpp/$gidshot
cd $projectpp
echo "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullname"_full.tar.gz" >> $log
$TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$fullname"_full.tar.gz $project
echo "END_TIME========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullname"_full.tar.gz" >> $log
}

########### backup ##############################
# 总体调用备份,此时会做相应的检查以确保备份前提准备充分
backup()
{
if [ -d $monthbakpp ]; then
chk_full
chk_incremental
tar_incremental
else
mkdir -p $bakpp/$ym
tar_full
fi
}

########### let's begin #############
# 先检查$bakpp是否存在,如果不存在先创建后备份
if [ -d $bakpp ];then
backup
else
mkdir -p $bakpp
backup
fi
#advice you can create a file for put backup file, eg /usr/cctcc
#crontab
#mini hours day month week command
# */5 * * * * /home/mmroot/zbb/aaa.sh
# 0 1 */1 * * /home/mmroot/zbb/aaa.sh
# tar -ztf test.tar.gz 查看备份文件里面的文件

有关crontab的用法请参阅:

http://blog.sina.com.cn/s/blog_4ac65f6f0100d4ay.html


遗留问题
1,查看磁盘空间
2,还原方法
3,删除上个月的备份
参考文档:

郑彬

2009-04-19 16:40:15

这个增量备份有个缺点:删除一个文件或文件夹,增量备份不会做任何记录。所以说你将来恢复的话删除过的文件会被恢复出来!!
谁有解决这个问题的办法吗?
思路:标识文件的几种状态:创建、修改、删除、已备份、未备份

盖茨

2009-05-15 14:51:05

find /bak/*.tar.gz -mtime 30 -exec rm -f {} \;

关于删除请参阅

http://bkeep.blog.163.com/blog/static/12341429020097155812154/

1,过滤出大小为0的文件
# ll |awk '{print $5,$8}' |grep ^0 |awk '{print $2}'
或者
# find ./ -size 0

2,过滤出大小为0的文件,并将它们删除

# ll |awk '{print $5,$8}' |grep ^0 |awk '{print $2}' |xargs rm -rf
或者
# find ./ -size 0 | xargs rm -f
或者
# find ./ -size 0 -exec rm -f {} \;

-----------------------------------
重点理解 exec参数和 xargs参数
-exec rm {} \; 相当于 rm -f 文件名1 文件名2 文件名3 (只调用了一次rm命令)
xargs rm -f 相当于 rm -f 文件名1; rm -f 文件名2; rm -f 文件名3 (调用了三次rm命令,这样效率更高)

-----------------------------------
# find /root/zbb/ -mtime +4    <==四天前修改过的文件
# find /root/zbb/ -mtime -4     
<==四天之内修改过的文件

阅读(1585) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~