用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使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 Python
python基础while循环及if判断的实例讲解
Aug 25 Python
Python制作词云的方法
Jan 03 Python
Python多层装饰器用法实例分析
Feb 09 Python
用python处理MS Word的实例讲解
May 08 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
python实现简单聊天室功能 可以私聊
Jul 12 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
May 10 Python
Python urllib2运行过程原理解析
Jun 04 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 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
php 强制下载文件实现代码
2013/10/28 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
Js sort排序使用方法
2011/10/17 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
比驿:全球酒店比价网
2018/06/20 全球购物
应用服务器有那些
2012/01/19 面试题
会计专业个人求职信范文
2014/01/08 职场文书
求职简历自我评价范例
2014/03/12 职场文书
保险公司晨会主持词
2014/03/22 职场文书
大学课外活动总结
2014/07/09 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
2014最新离职证明范本
2014/09/12 职场文书
会计求职简历自我评价
2015/03/10 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
导游词之天津盘山
2019/11/01 职场文书
js中Object.create实例用法详解
2021/10/05 Javascript