4532 发表于 2016-7-29 09:05:06

python同步目录



#!/usr/bin/env python
#coding:utf-8

'''
@ 2016-07-28_17:30
在上一个脚本的基础上,将备目录中多余的目录和文件删除。
./3.py <主目录> <备目录>
'''

import filecmp
import sys
import os
import shutil

diff_list = []

def comp(dir1, dir2):
    dir1_path = os.path.abspath(dir1)
    dir2_path = os.path.abspath(dir2)
    diff_dirs = filecmp.dircmp(dir1, dir2)
    for item in diff_dirs.left_only + diff_dirs.diff_files + diff_dirs.common_funny:
      diff_list.append(os.path.join(dir1_path, item))
    if len(diff_dirs.common_dirs) > 0:    #用来递归查询
      for item in diff_dirs.common_dirs:
            comp(os.path.join(dir1_path, item), os.path.join(dir2_path, item))
    return diff_list

if __name__ == "__main__":
    dir1 = sys.argv
    dir2 = sys.argv
    diff_list = comp(dir1, dir2)
    for i in diff_list:    #将主目录中复制到备目录
      second_i = i.replace(os.path.abspath(dir1), os.path.abspath(dir2))
      if os.path.exists(second_i) and os.path.isfile(second_i):
            os.remove(second_i)
            shutil.copyfile(i, second_i)
      elif os.path.exists(second_i) and os.path.isdir(second_i):
            shutil.rmtree(second_i)
            shutil.copytree(i, second_i)
      elif os.path.isfile(i):
            shutil.copyfile(i, second_i)
      else:
            shutil.copytree(i, second_i)
    rm_diff_list = comp(dir2, dir1)
    for item in rm_diff_list:    #将备目录中多余的删除
      try:
            os.remove(item)
      except:
            shutil.rmtree(item)

    print "Done ."




页: [1]
查看完整版本: python同步目录