用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基于phantomjs实现导入图片
May 13 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
pandas系列之DataFrame 行列数据筛选实例
Apr 12 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
Python threading.local代码实例及原理解析
Mar 16 Python
django模板获取list中指定索引的值方式
May 14 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 Python
详解python爬取弹幕与数据分析
Nov 14 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 Python
Python办公自动化PPT批量转换操作
Sep 15 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
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
python求前n个阶乘的和实例
2020/04/02 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
空指针到底是什么
2012/08/07 面试题
什么是索引指示器
2012/08/20 面试题
学前教育学生自荐信范文
2013/12/31 职场文书
顶岗实习接收函
2014/01/09 职场文书
合伙购房协议样本
2014/10/06 职场文书
大学运动会加油稿
2015/07/22 职场文书
奠基仪式致辞
2015/07/30 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python