用Python写脚本,实现完全备份和增量备份的示例


Posted in Python onApril 29, 2018

需求:

在/root/backup下面有两个文件夹dst和src。要求在周一的时候进行完全备份,其余日子进行增量备份。从src备份到dst。

思路及关键点:

建立一个文件,以字典方式记录src的文件名以及文件对应的md5的值

完全备份的时候将文件名和md5值写在一个文件里面。cPickle的知识点。

增量备份的时候比较文件名是否在key里面,没有就要备份;有的话,这个文件的md5值是否改变,改变了就要备份

os.path.join()拼接路径,os.listdir(),os.chdir()

time.strftime()判断周几

cPickle,可以无损记录所有Python的变量类型。文件操作。

tarfile对文件打包的使用

hashlib用于计算文件md5的值。注意不要一次打开一个文件,4k地打开,防止打开一个超大文件爆内存。

with file()可以打开一个文件之后不f.close()

#!/usr/bin/env python
import time
import os
import cPickle as p
import tarfile
import hashlib
baseDir = '/root/backup'
srcDir = 'src'
dstDir = 'dst'
fullName = "full_%s_%s.tar.gz" % (srcDir, time.strftime('%Y%m%d'))
incrName = "incr_%s_%s.tar.gz" % (srcDir, time.strftime('%Y%m%d'))
md5file = 'md5.data'
def md5sum(fname):
 m = hashlib.md5()
 with file(fname) as f:
  while True:
   data = f.read(4096)
   if len(data) == 0:
    break
   m.update(data)
 return m.hexdigest()
def fullBackup():
 md5Dict = {}
 fileList = os.listdir(os.path.join(baseDir,srcDir))
 for eachFile in fileList:
  md5Dict[eachFile] = md5sum(os.path.join(baseDir,srcDir,eachFile))
 with file(os.path.join(baseDir,dstDir,md5file),'w') as f:
  p.dump(md5Dict,f)
 tar = tarfile.open(os.path.join(baseDir,dstDir,fullName),'w:gz')
 os.chdir(baseDir)
 tar.add(srcDir)
 tar.close()
def incrBackup():
 newmd5 = {}
 fileList = os.listdir(os.path.join(baseDir,srcDir))
 for eachFile in fileList:
  newmd5[eachFile] = md5sum(os.path.join(baseDir,srcDir,eachFile))
 with file(os.path.join(baseDir,dstDir,md5file)) as f:
  storedmd5 = p.load(f)
 tar = tarfile.open(os.path.join(baseDir,dstDir,incrName),'w:gz')
 os.chdir(baseDir)
 for eachKey in newmd5:
  if (eachKey not in storedmd5) or (newmd5[eachKey] != storedmd5[eachKey]):
   tar.add(os.path.join(srcDir,eachKey))
 tar.close()
 with file(os.path.join(baseDir,dstDir,md5file),'w') as f:
  p.dump(newmd5,f)
def main():
 if time.strftime('%a') == 'Mon':
  fullBackup()
 else:
  incrBackup()
if __name__ == '__main__':
 main()
~

以上这篇用Python写脚本,实现完全备份和增量备份的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
python异常和文件处理机制详解
Jul 19 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
python实现雨滴下落到地面效果
Jun 21 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
python调用自定义函数的实例操作
Jun 26 Python
深入学习python多线程与GIL
Aug 26 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
python实现腾讯滑块验证码识别
Apr 27 Python
基于python的多进程共享变量正确打开方式
Apr 28 #Python
基于Python log 的正确打开方式
Apr 28 #Python
python+pandas分析nginx日志的实例
Apr 28 #Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 #Python
python实现关键词提取的示例讲解
Apr 28 #Python
python实现扫描日志关键字的示例
Apr 28 #Python
python socket网络编程之粘包问题详解
Apr 28 #Python
You might like
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
原生JS实现天气预报
2020/06/16 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
python抓取京东商城手机列表url实例代码
2013/12/18 Python
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python django生成迁移文件的实例
2019/08/31 Python
python解析多层json操作示例
2019/12/30 Python
物流管理专业应届生求职信
2013/11/21 职场文书
银行委托书范本
2014/04/04 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
学习十八大标语
2014/10/09 职场文书
研究生导师评语
2014/12/31 职场文书
教师工作能力自我评价
2015/03/04 职场文书
保送生自荐信范文
2015/03/26 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
MYSQL 表的全面总结
2021/11/11 MySQL
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers