用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在指定目录下查找gif文件的方法
May 04 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
Jun 25 Python
python内存管理机制原理详解
Aug 12 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
Python基础详解之邮件处理
Apr 28 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
zf框架的registry(注册表)使用示例
2014/03/13 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
Python读写配置文件的方法
2015/06/03 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
浅析Python函数式编程
2018/10/06 Python
python实现多进程代码示例
2018/10/31 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
校园摄影活动策划方案
2014/02/05 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
安全责任书
2015/01/29 职场文书
迎新生晚会主持词
2015/06/30 职场文书
党校培训学习心得体会
2016/01/06 职场文书
优质护理心得体会
2016/01/22 职场文书