#/usr/bin/env python #coding=utf8 #用来对比目录中文件的区别 #2015.11.12 #V0.0.0.1 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) #将更新文件名或者目录追加到holderlist [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: compareme(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=compareme(dir1,dir2) #获取dir1的绝对路径 dir1=os.path.abspath(dir1) #如果不是以/结尾则在后面加上个/ if not dir2.endswith('/'): dir2=dir2+'/' #获取dir2的绝对路径 dir2=os.path.abspath(dir2) destination_files=[] #遍历输出返回的差异文件或者目录的清单 for item in source_files: createdir_bool=False #将原目录差异清单对应替换成备份目录 destination_dir=re.sub(dir1,dir2,item) destination_files.append(destination_dir) #再次调用compareme函数标记 if os.path.isdir(item): if not os.path.exists(destination_dir): os.makedirs(destination_dir) createdir_bool=True #通过createdir_bool参数来判断是否还有子目录 if createdir_bool: destination_files=[] source_files=[] source_files=compareme(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) for item in copy_pair: #判断是否为文件,是则进行复制操作 if os.path.isfile(item[0]): shutil.copyfile(item[0],item[1]) if __name__ == '__main__': main()
python源码目录都是什么_Python——目录对比源代码
最新推荐文章于 2024-06-30 21:37:01 发布