用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实现telnet客户端的方法
Apr 15 Python
Python模拟三级菜单效果
Sep 11 Python
Python File readlines() 使用方法
Mar 19 Python
PyQT实现多窗口切换
Apr 20 Python
Python之文字转图片方法
May 10 Python
利用Python如何生成便签图片详解
Jul 09 Python
python向字符串中添加元素的实例方法
Jun 28 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
python实现低通滤波器代码
Feb 26 Python
通过自学python能找到工作吗
Jun 21 Python
深入了解Python enumerate和zip
Jul 16 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
May 31 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
php的字符串用法小结
2010/06/08 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
vue实现分页栏效果
2019/06/28 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python中__init__.py文件的作用详解
2016/09/18 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
浅析matlab中imadjust函数
2020/02/27 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
学习礼仪心得体会
2014/09/01 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
公司开会通知
2015/04/20 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
golang日志包logger的用法详解
2021/05/05 Golang