|
| #!/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[1]
dir2 = sys.argv[2]
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 ."
|
|
|