阿使得肌肤· 发表于 2018-8-14 10:11:41

Python学习笔记-校验源与备份目录差异

#!/usr/bin/python3  
#
  
import os
  
import sys
  
import filecmp
  
import re
  
import shutil
  
holderlist=[]
  

  
def compareme(dir1,dir2):   #递归获取更新项函数
  dircomp = filecmp.dircmp(dir1,dir2)
  only_in_one = dircomp.left_only   #源目录新文件或目录
  diff_in_one = dircomp.diff_files    #不匹配文件,源目录文件已经发生变化
  dirpath = os.path.abspath(dir1)   #定义源目录绝对路径
  
  
  

  if len(dircomp.common_dirs) > 0:    #判断是否存在相同子目录,以便递归
  for item in dircomp.common_dirs:    #递归子目录
  compareme(os.path.abspath(os.path.join(dir1,item)), os.path.abspath(os.path.join(dir2,item)))
  return holderlist
  
def checkargv():
  if len(sys.argv) < 2:   #要求输入源目录与备份目录
  print ("Usage: ", sys.argv, "datadir backupdir")
  sys.exit()
  else:
  dir1 = sys.argv
  dir2 = sys.argv
  source_files = compareme(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   #再次调用compareme函数标记
  

  if createdir_bool:      #重新调用compareme函数,重新遍历新创建目录的内容
  destination_files = []
  source_files = []
  source_files = compareme(dir1,dir2)   #调用compareme函数
  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)   #讲源目录与备份目录文件清单拆分成元组
  for item in copy_pair:
  if os.path.isfile(item):   #判断是否为文件,是则进行复制操作
  shutil.copyfile(item, item)
  

  
if __name__ == '__main__':
  checkargv()
页: [1]
查看完整版本: Python学习笔记-校验源与备份目录差异