用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使用代理抓取网站图片(多线程)
Mar 14 Python
浅谈Python NLP入门教程
Dec 25 Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
python绘制散点图并标记序号的方法
Dec 11 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
简单了解python的内存管理机制
Jul 08 Python
python3实现的zip格式压缩文件夹操作示例
Aug 17 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
python实现实时视频流播放代码实例
Jan 11 Python
python 模拟登陆github的示例
Dec 04 Python
Python实现我的世界小游戏源代码
Mar 02 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
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
Python实现自动发送邮件功能
2021/03/02 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
Pyqt5实现英文学习词典
2019/06/24 Python
超简单的Python HTTP服务
2019/07/22 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
经贸专业毕业生求职信范文
2014/05/01 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
python实现的web监控系统
2021/04/27 Python