Python实现定期检查源目录与备份目录的差异并进行备份功能示例


Posted in Python onFebruary 27, 2019

本文实例讲述了Python实现定期检查源目录与备份目录的差异并进行备份功能。分享给大家供大家参考,具体如下:

在项目中,经常要更新文件,在更新之前首先要备份源文件,所以就用到了这个脚本(来自于Python自动化运维这本书),总共有以下几个步骤:

1. 获取要进行比较的两个目录,进行差异比较,把源目录特有的文件或目录、以及和备份目录不同的文件或目录保存到列表中,并且判断目录下面是否还有目录,递归进行保存这些差异文件。
2. 将差异文件列表中文件或目录的路径换成对应的备份路径,进行判断,如果备份路径不存在,就创建目录。
3. 继续对比源目录和新创建的备份目录中的差异文件,把源路径换成备份目录的路径。
4. 然后遍历复制源目录文件到备份目录。

以下是具体的实现代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys
import filecmp
import re
import shutil
holderlist = []
##对应第一个步骤
def compare_me(dir1, dir2):
  dircomp = filecmp.dircmp(dir1, dir2)
  only_in_one = dircomp.left_only
  diff_in_one = dircomp.diff_files
  dirpath = os.path.abspath(dir1)
  [ holderlist.append(os.path.abspath(os.path.join(dir1, x))) for x in only_in_one ]
  [ holderlist.append(os.path.abspath(os.path.join(dir1, x))) for x in diff_in_one ]
  if len(dircomp.common_dirs) > 0:
    for item in dircomp.common_dirs:
      compare_me(os.path.abspath(os.path.join(dir1, item)), os.path.abspath(os.path.join(dir2, item)))
  return holderlist
##对应第二个步骤
def main():
  if len(sys.argv) > 2:
    dir1 = sys.argv[1]
    dir2 = sys.argv[2]
  else:
    print "Usage: ", sys.argv[0], "datadir backupdir"
    sys.exit()
  source_files = compare_me(dir1, dir2)
  dir1 = os.path.abspath(dir1)
  if not dir2.endswith('/'):
    dir2 = dir2 + '/'
  dir2 = os.path.abspath(dir2)
  destination_files = []
  createdir_bool = False
  for item in source_files:
    destination_dir = re.sub(dir1, dir2, item)
    destination_files.append(destination_dir)
    if os.path.isdir(item):
      if not os.path.exists(destination_dir):
        os.makedirs(destination_dir)
        createdir_bool = True
   ##对应第三个步骤
  if createdir_bool:
    destination_files = []
    source_files = []
    source_files = compare_me(dir1, dir2)
    for item in source_files:
      destination_dir = re.sub(dir1, dir2, item)
      destination_files.append(destination_dir)
  ##对应第四个步骤
  print "update item: "
  print source_files
  copy_pair = zip(source_files, destination_files)
  print "copy_pair is %s" % copy_pair
  for item in copy_pair:
    print "item is %s, %s" % (item[0], item[1])
    if os.path.isfile(item[0]):
      shutil.copyfile(item[0], item[1])
if __name__ == '__main__':
  main()

最后根据需要,可以设定一个定时检查,进行自动同步源目录和备份目录,让其保持一致性。

Python 相关文章推荐
python实现保存网页到本地示例
Mar 16 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
python僵尸进程产生的原因
Jul 21 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
python3 pygame实现接小球游戏
May 14 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
Python实现密钥密码(加解密)实例详解
Apr 26 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
Python基础之元组与文件知识总结
May 19 Python
详解Django-restframework 之频率源码分析
Feb 27 #Python
Python的UTC时间转换讲解
Feb 26 #Python
Python逐行读取文件中内容的简单方法
Feb 26 #Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 #Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 #Python
初探利用Python进行图文识别(OCR)
Feb 26 #Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 #Python
You might like
PHP操作数组相关函数
2011/02/03 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
javascript简易画板开发
2020/04/12 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python中使用装饰器来优化尾递归的示例
2016/06/18 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
详解Python的循环结构知识点
2019/05/20 Python
Python的互斥锁与信号量详解
2019/09/12 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
Anya Hindmarch官网:奢侈设计师手袋及配饰
2018/11/15 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
一份Java笔试题
2012/02/21 面试题
SQL面试题
2013/12/09 面试题
员工考核管理制度
2014/02/02 职场文书
禁烟标语大全
2014/06/11 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
自主招生学校推荐信
2014/09/26 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
班委竞选稿范文
2015/11/21 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
零基础学java之循环语句的使用
2022/04/10 Java/Android