用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 SDK写一个同步脚本及使用教程
Aug 23 Python
Python算法应用实战之队列详解
Feb 04 Python
python版学生管理系统
Jan 10 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
python 实现对数据集的归一化的方法(0-1之间)
Jul 17 Python
python中的常量和变量代码详解
Jul 25 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
python图片合成的示例
Nov 09 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的一个登录的类 [推荐]
2007/03/16 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
JavaScript 指导方针
2007/04/05 Javascript
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
IE6-IE9使用JSON、table.innerHTML所引发的问题
2015/12/22 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
从0开始学Vue
2016/10/27 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Python3几个常见问题的处理方法
2019/02/26 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
行政前台岗位职责
2013/12/04 职场文书
文案策划求职信
2014/04/14 职场文书
爱心募捐通知范文
2015/04/27 职场文书
小时代观后感
2015/06/10 职场文书
导游词之杭州西湖
2019/09/19 职场文书
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python