python备份发包脚本_用Python写脚本,实现完全备份和增量备份的示例
需求:
在/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写脚本,实现完全备份和增量备份的示例相关推荐
- python写魔兽世界脚本_用python bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本...
2019-03-11更新:原来NSIS脚本也可以禁用64位文件操作重定向的! 1.在安装脚本的开始处定义 LIBRARY_X64. !include "MUI.nsh" !incl ...
- 手机写python脚本_用Python写王者荣耀刷金币脚本
王者荣耀很多朋友都想买脚本和挂之类的,想更加容易的获得金币等可以在游戏里买英雄等,今天我们发挥程序员的优势教给大家用Python语言自己写一个可以刷金币的脚本,以下是全部内容. 王者荣耀的冒险模式里有 ...
- python批量拷贝数据脚本_使用python来玩转ensp~3-写个批量备份配置文件脚本
目录回顾: 根据前面所学习的知识,可以远程登录设备下发命令等,现在已经可以转化为生产力了哈,今天小Q要实现的就是一个批量备份配置的小东西, 小Q通过学习产品文档了解到,可以通过以下四种方法进行备份配置 ...
- python网络游戏脚本_用Python写一个游戏脚本,你会吗?
学习python有一段时间了,由于python语言的强大和简洁,是一个不错的脚本语言,就准备做个游戏脚本练练手.如果你也想多练项目实战.可以去小编的Python交流.裙 :一久武其而而流一思(数字的谐 ...
- python写自动脚本_用Python实现FGO自动战斗脚本
我家黑贞! 1. 背景 Fate/Grand Order(非的肝不过欧的)作为索尼为了拯救自己不倒闭而开发的面向月厨的骗氪养成抽卡爆肝游戏,居然没有像隔壁<阴阳师>的自动战斗系统(看看别人 ...
- python和易语言写游戏脚本_用Python写王者荣耀刷金币脚本
王者荣耀很多朋友都想买脚本和挂之类的,想更加容易的获得金币等可以在游戏里买英雄等,今天我们发挥程序员的优势教给大家用Python语言自己写一个可以刷金币的脚本,以下是全部内容. 王者荣耀的冒险模式里有 ...
- 用python写shell脚本_应用python编写shell脚本
今天同事叫我编写一个shell脚本.话说,虽然我受*nix的影响甚深,但是对于*nix里随处可见的sh脚本却是讨厌之极.为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没 ...
- python访问文件下载地址_用Python脚本去获得skydrive上文件的真实地址链接 + 提供脚本下载v2012-01-18...
之前得知微软提供的免费在线云存储空间Skydrive提供的空间大小达25GB的时候,就像其他人一样想到了可以用来存储音视频和图片,作为文件存储器,以便和别人分享文件.但是后来发现,skydrive中上 ...
- shell调用python获取返回值_[linux的shell脚本调用python脚本的返回值][shell调python][ubuntu的shell调用python脚本得到返回值]...
最近搞个东西,需要写shell脚本,但在shell脚本里需要调用python并得到变量值,网上找了很多都是python调shell的,最后请教了一下郭总 知道了sys.argv的用法后才搞定了,在此感 ...
最新文章
- 移植uboot第九步:支持yaffs映像烧写
- Effective C++ 条款47
- (课程学习笔记)Python初级入门精讲
- 第三次学JAVA再学不好就吃翔(part97)--抛出异常
- 简明Vim练级攻略(初学者)
- 热烈祝贺《大数据》主编郑纬民教授当选中国工程院院士!!!
- 游戏服务器当中的唯一名设计方法
- GitLab版本升级
- 分布式应用之分布式缓存
- 磁盘读写的时间花费和调度算法(操作系统)
- 组策略设置屏保的方法
- 一个字节8位,无符号类型,最大值为什么是2的8次方-1,范围0-255
- BlueCms v1.6 本地文件包含漏洞代码审计
- SpringBoot事务配置管理
- 基于FPGA的DDS设计
- 《洋妞》万像电影节揽四奖 或打造同名综艺节目
- Oracle 中经常遇到的一些问题
- 物联网时代的工控机防病毒/主机加固需求分析
- 默蓝网络通信TCP/HTTP测试工具介绍
- fancybox ajax post,javascript - 将jquery fancybox显示为ajax成功
热门文章
- ghost还原固态硬盘_最完整用GHOST安装UEFI(GPT)引导的系统请关注收藏
- oracle自动创建分区存储过程,oracle 存储过程创建表分区
- linux 中断 应用程序,Linux中断编程
- SpringBoot 简单实现仿CAS单点登录系统
- 手机通讯录备份代码实现一
- mysql排插问题_手把手教你分析 MySQL 死锁问题
- Kaggle比赛(一)Titanic: Machine Learning from Disaster
- 内存映射处理大文件[转载]
- MapReduce任务学习系列
- C语言第五次博客作业---函数