linux文件增量备份,linux 文件增量备份 用tar实现

#!/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的用法请参阅:

遗留问题

1,查看磁盘空间

2,还原方法

3,删除上个月的备份

参考文档:

郑彬:

2009-04-19 16:40:15

这个增量备份有个缺点:删除一个文件或文件夹,增量备份不会做任何记录。所以说你将来恢复的话删除过的文件会被恢复出来!!

谁有解决这个问题的办法吗?

思路:标识文件的几种状态:创建、修改、删除、已备份、未备份盖茨:

2009-05-15 14:51:05

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

关于删除请参阅

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<==四天之内修改过的文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值