目标:

1.传入3个参数:源文件路径,目标文件路径,md5文件

2.每周一实现全量备份,其余时间增量备份

1.通过传入的路径,获取该路径下面的所有目录和文件(递归)

方法一:使用os.listdir

代码如下:

#!/usr/bin/env python

#coding:utf8

import os,sys

def lsdir(folder):

contents = os.listdir(folder)

print "%s\n%s\n" % (folder, contents)

for path in contents:

full_path = os.path.join(folder, path)

if os.path.isdir(full_path):

lsdir(full_path)

if __name__ == "__main__":

lsdir(sys.argv[1])

•运行代码,效果如下:

[root@localhost python]# python listdir.py /a

/a

['b', 'a.txt']

/a/b

['c', 'b.txt']

/a/b/c

['c.txt']

方法二:使用os.walk

代码如下:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import os,sys

def lsdir(folder):

contents = os.walk(folder)

for path, folder, file in contents:

print "%s\n%s\n" %(path, folder + file)

if __name__ == "__main__":

lsdir(sys.argv[1])

•运行代码,测试效果

[root@localhost python]# python listdir1.py /a

/a

['b', 'a.txt']

/a/b

['c', 'b.txt']

/a/b/c

['c.txt']

2.如何计算文件的md5值(每次读取4K,直到读取完文件所有内容,返回一个16进制的md5值)

代码如下:

[root@localhost python]# cat md5.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import hashlib

import sys

def md5(fname):

m = hashlib.md5()

with open(fname) as fobj:

while True:

data = fobj.read(4096)

if not data:

break

m.update(data)

return m.hexdigest()

if __name__ == "__main__":

print md5(sys.argv[1])

•运行代码,测试效果

[root@localhost python]# python md5.py a.txt

c33da92372e700f98b006dfa5325cf0d

[root@localhost python]# md5sum a.txt

c33da92372e700f98b006dfa5325cf0d a.txt

*提示:使用linux自带的md5sum和自己编写的Python计算的md5值相通

3.编写全量和增量备份脚本

代码如下:

#!/usr/bin/env python

#coding:utf8

import time

import os

import tarfile

import cPickle as p

import hashlib

def md5check(fname):

m = hashlib.md5()

with open(fname) as fobj:

while True:

data = fobj.read(4096)

if not data:

break

m.update(data)

return m.hexdigest()

def full_backup(src_dir, dst_dir, md5file):

par_dir, base_dir = os.path.split(src_dir.rstrip('/'))

back_name = '%s_full_%s.tar.gz' % (base_dir, time.strftime('%Y%m%d'))

full_name = os.path.join(dst_dir, back_name)

md5dict = {}

tar = tarfile.open(full_name, 'w:gz')

tar.add(src_dir)

tar.close()

for path, folders, files in os.walk(src_dir):

for fname in files:

full_path = os.path.join(path, fname)

md5dict[full_path] = md5check(full_path)

with open(md5file, 'w') as fobj:

p.dump(md5dict, fobj)

def incr_backup(src_dir, dst_dir, md5file):

par_dir, base_dir = os.path.split(src_dir.rstrip('/'))

back_name = '%s_incr_%s.tar.gz' % (base_dir, time.strftime('%Y%m%d'))

full_name = os.path.join(dst_dir, back_name)

md5new = {}

for path, folders, files in os.walk(src_dir):

for fname in files:

full_path = os.path.join(path, fname)

md5new[full_path] = md5check(full_path)

with open(md5file) as fobj:

md5old = p.load(fobj)

with open(md5file, 'w') as fobj:

p.dump(md5new, fobj)

tar = tarfile.open(full_name, 'w:gz')

for key in md5new:

if md5old.get(key) != md5new[key]:

tar.add(key)

tar.close()

if __name__ == '__main__':

src_dir = '/Users/xkops/gxb/'

dst_dir = '/tmp/'

md5file = '/Users/xkops/md5.data'

if time.strftime('%a') == 'Mon':

full_backup(src_dir, dst_dir, md5file)

else:

incr_backup(src_dir, dst_dir, md5file)

•运行代码,测试效果(执行前,修改需要备份的文件和路径),运行之后检查/tmp下是否生成了当天的备份文件。

python实现对文件的全量、增量备份

#!/user/bin/env python # @Time :2018/6/6 10:10 # @Author :PGIDYSQ #@File :FileBackup2.py import os i ...

MySQL5.7.18 备份、Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份,数据导入导出

粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份 --备份的目的 灾难恢复:意外情况下(如服务器宕机.磁盘损坏等)对损 ...

mysql全量和增量备份详解(带脚本)

在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...

oracle全量、增量备份

采用0221222增量备份策略,7天一个轮回 也就是周日0级备份,周1 2 4 5 6 采用2级增量备份,周3采用1级增量备份 打开控制文件自动备份 CONFIGURE CONTROLFILE AUT ...

innobackupex在线备份及恢复(全量和增量)

Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品.Xtrabackup由个部分组成:xtrabackup和innob ...

关于Subversion主从备份方式的调整(全量、增量脚本)更新

本文引用于http://blog.chinaunix.net/uid-25266990-id-3369172.html 之前对Subversion服务器作了迁移,关于SVN的架构也走了调整,有单一的服 ...

Mysql备份工具xtraback全量和增量测试

Mysql备份工具xtraback全量和增量测试   xtrabackup 是 percona 的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表) 官方网址http:// ...

MySQL数据以全量和增量方式,同步到ES搜索引擎

本文源码:GitHub·点这里 || GitEE·点这里 一.配置详解 场景描述:MySQL数据表以全量和增量的方式向ElasticSearch搜索引擎同步. 1.下载内容 elasticsearch ...

python模块目录文件后续

1,新增PythonModule加载path Ruiy tip(关于python list[]数据库类型特殊你懂的!append(""),extend([""] ...

随机推荐

stm32 usb error : identifier "bool" is undefined

.\usb\USB\usb_pwr.h(54): error:  #20: identifier "bool" is undefinedusb\USB\usb_pwr.h(54): ...

解决Android SDK Content Loader 0%的问题

在Android的开发过程中,应该说大多数人都遇到过此问题. 具体原因不得而知,在workspace中导入了太多的工程可能是其中一个原因. 网上有很多针对此问题的解决方法,对于我自己而言,下面两个方法 ...

findByExample(Object exampleEntity)方法得到的List判断是否为空,不可用(lis != null)

用findByExample(Object exampleEntity)方法可以应用在用户登录上面,获得有登陆名和密码的user对象进行查询. 返回两者都符合的对象列表,为空则登陆失败. 错误的方法: ...

NuGet更新引用Dll

第一种 通过 "Add Library Package Reference..." 添加 点击 ‘Add Library Package Reference...’ , 搜索你要添 ...

hdu 4857 逃生

题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能 ...

检测android机器是否有GPS模块

public boolean hasGPSDevice(Context context) { final LocationManager mgr = (LocationManager)context. ...

使用ReactiveCocoa实现iOS平台响应式编程

使用ReactiveCocoa实现iOS平台响应式编程 ReactiveCocoa和响应式编程 在说ReactiveCocoa之前,先要介绍一下FRP(Functional Reactive Prog ...

nodejs的重要支柱

概念:模块(Module)和包(Package)是Node.js最重要的支柱. 开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分.分装.然后组合起来.模块正式为了实现这种方式而诞生 ...

jsp和servlet的区别和联系

jsp和servlet的区别和联系:1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能 ...

Properties集合_练习

定义功能:获取一个应用程序 运行次数,如果超过5次,给出使用次数已到请注册的提示,并不要再运行程序 思路:  1.定义计数器:每次程序启动都需要计数一次,并且是在原有的次数上进行计数.  2.计数器就 ...

python 读取文件夹 增量文件_Python实现目录文件的全量和增量备份相关推荐

  1. python从指定文件夹导入模块_python – 从特定文件夹导入模块

    我有一个名为Script的文件夹,里面有temp.py脚本.我的临时脚本从名为lib的子文件夹导入模块. Lib文件夹里面有空的__init__.py和我的parent_computer_test.p ...

  2. python 获取文件夹名称大全_python 获取指定文件夹下所有文件名称并写入列表的实例...

    如下所示: import os import os.path rootdir = "./pic_data" file_object = open('train_list.txt', ...

  3. python查找指定文件夹并重命名_python获取指定文件夹下的所有文件名,并删选指定类型文件进行重命名以及撤销重命名...

    1.加载包 import os 2.定义函数:获取文件夹file_dir下指定类型file_type的所有文件名 def file_name(file_dir,file_type=''):#默认为文件 ...

  4. linux 怎么管理文件夹,Linux 是如何管理目录文件?

    Linux 是使用级层式的树状结构来管理文件目录,如下图所示(只列出了部分目录文件): 在 Linux 中,所有的文件和目录都由根目录(/)开始.它是所有目录和文件的源头,然后再一个一个分支下去.所以 ...

  5. 【转】python改文件夹名称大全_python文件和目录操作方法大全(含更改文件夹下所有文件名称的实例)

    原文:​​​​​​ ​​​​​​​​​​​​​​​​​​​python改文件夹名称大全_python文件和目录操作方法大全(含更改文件夹下所有文件名称的实例)..._心失荒野的博客-CSDN博客 一. ...

  6. python文件命名文件夹怎么删除_python文件批量重命名、删除文件夹

    第一次觉得用python整理数据真的很方便! 主要操作: 1.用文件内容重命名标注文件 2.合并独立文件夹中的文件,并删除原文件夹 3.将对应的标注文件移动到图片文件夹中 主要函数: os.listd ...

  7. python读取指定页docx内容_Python读取指定目录下指定后缀文件并保存为docx

    最近有个奇葩要求 要项目中的N行代码 申请专利啥的 然后作为程序员当然不能复制粘贴 用代码解决.. 使用python-docx读写docx文件 环境使用python3.6.0 首先pip安装pytho ...

  8. Python实现目录文件的全量和增量备份

    目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...

  9. Pymediainfo读取文件夹视频长度并写入Excel文件(openpyxl)

    Pymediainfo读取文件夹视频长度并写入excel文件(openpyxl) 导入使用的module 路径设置以及初始化 获取全部文件名称与文件大小 获取视频详细信息并存储 时间统计并得到总秒数及 ...

最新文章

  1. php yii2支付宝开发,yii2 支付宝支付教程 [ 2.0 版本 ]
  2. Linux的19 个装B的命令,记得搂一遍!!!
  3. 热烈庆祝AC70道题
  4. SQL中除数为0处理情况演示
  5. 页面滚动时触发图片逐帧播放_如何在滚动效果上创建逐帧运动图像
  6. keepalived vip ping不通_【干货分享】OpenStack LVS负载均衡为什么不通?
  7. 07 | 卷积神经网络:给你的模型一双可以看到世界的眼睛
  8. python测试报告
  9. 探索性测试 之 极速测试
  10. Android中文API(98)—— ContextMenu.ContextMenuInfo
  11. hdu 3925 一道复杂的简单题
  12. python编程方式_python的两种编程方式是什么
  13. linux基础命令入门到精通
  14. 家庭常用5号/7号电池购买及使用攻略
  15. Dva员工增删改查Demo实现-优化
  16. 筹备冲刺科创板,佰维存储做对了哪些事情?
  17. 智慧校园建设内容简述
  18. Android 分屏模式 问题总结
  19. 二十天前我亲手种下一颗种子:阿秀的校招笔记
  20. freemodbus源码笔记

热门文章

  1. 科学家揭示阿加迪尔海底滑坡的形成时间和动力学过程
  2. HTML的input属性
  3. “装箱”和“拆箱”操作(有详细的代码案例和说明);
  4. vue3+echarts绘制横向柱形进度图
  5. 2020年社工库_浸润社工2020年韩博士医院重阳节联欢会
  6. 上大学要学些啥?干些啥?
  7. Magic Data入选艾瑞《中国面向人工智能的数据治理》行业研究报告
  8. 关于台账自动化管理的分享交流会
  9. CreateFileMapping/OpenFileMapping/MapViewOfFile
  10. 统计学,机器学习,深度学习和数控编程简介