python源目录与备份目录差异检查并同步

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import re
import filecmp
import shutil

holderlist=[]
def compareme(dir1,dir2):
	dircomp=filecmp.dircomp(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:
			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 "请准确输入参数,例如:python comp.py datadir backupdir"
		sys.exit()
	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_dir =item.replace(dir1, dir2)
		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=compareme(dir1,dir2)
		for item in source_files:
			destination_dir = item.replace(dir1, dir2)
#			destination_dir=re.sub(dir1,dir2,item)
			destination_files.append(destination_dir)
			
	print "更新的内容:"
	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()
			
	
	
	
脚本代码可直接使用
	
	


猜你喜欢

转载自blog.51cto.com/superleedo/2115356