用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获取豆瓣电影简介代码分享
Jan 16 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
python 中不同包 类 方法 之间的调用详解
Mar 09 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 Python
python中四舍五入的正确打开方式
Jan 18 Python
在python3.9下如何安装scrapy的方法
Feb 03 Python
关于的python五子棋的算法
May 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
使用无限生命期Session的方法
2006/10/09 PHP
php通过baihui网API实现读取word文档并展示
2015/06/22 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
深入分析PHP设计模式
2020/06/15 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
python字典key不能是可以是啥类型
2020/08/04 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
2014政务公开实施方案
2014/02/19 职场文书
施工安全责任书
2014/04/14 职场文书
责任心演讲稿
2014/05/14 职场文书
目标责任书格式范文
2015/05/11 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书