1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4
5 # Fast copy for Winodws or Linux
6 # Copy file to
7
8 import os
9 import sys
10 import re
11 from optparse import OptionParser
12
13
14 def CallFastCmd(src, dest):
15 cmd = "XCOPY " + src +" " + dest
16 print u"命令行"+ cmd
17 os.system(cmd)
18
19 def SplitStr(src, split):
20 return src.split(split)
21
22
23
24 def IsCanCopy(path, include, exclude):
25 IsCan = False
26 split = "|"
27 if include is None:
28 if exclude is None:
29 IsCan = True
30 else:
31 for excStr in SplitStr(exclude, split):
32 if (excStr not in path):
33 IsCan = True
34 else:
35 for incStr in SplitStr(include, split):
36
37 if exclude is not None :
38 for excStr in SplitStr(exclude, split):
39 if (excStr not in path) and (incStr in path):
40 IsCan = True
41 elif incStr in path:
42 IsCan = True
43
44
45
46 #返回值
47 return IsCan
48
49
50
51 def CopyToSubDir(src, des, include, exclude, regEnable):
52 for root,dirs,files in os.walk(des):
53 for dirPath in dirs:
54 subPath = os.path.join(root,dirPath) # 路径
55 if not regEnable:
56 if IsCanCopy(subPath, include, exclude):
57 CallFastCmd(src, subPath)
58 else: #使用正则表达式
59 incReg = include
60 excReg = exclude
61
62 incMatch = incReg.match(incReg, subPath)
63 if incMatch is not None:
64 excMatch = excReg.match(excReg, subPath)
65 if excMatch is None:
66 CallFastCmd(src, subPath)
67
68
69
70
71
72 def Copy(src, des, include, exclude , regEnable):
73 if not os.path.exists(des):
74 CallFastCmd(src, des)
75 else:
76 CopyToSubDir(src, des, include, exclude, regEnable)
77
78
79
80 def ParseCmd():
81 parser = OptionParser()
82 parser.add_option("-s", "--src", action="store", dest="src", help="input the Dir or file")
83 parser.add_option("-d", "--des", action="store", dest="des", help="input the Dir or file")
84 parser.add_option("-i", "--include",action="store", dest="include", help="input the include string")
85 parser.add_option("-e", "--exclude",action="store", dest="exclude", help="input the exclude string")
86 parser.add_option("-r", "--regEnable",action="store_true", dest="regEnable", default=False, help="input the exclude string")
87
88
89 (options, args) = parser.parse_args()
90 if options.src is None:
91 parser.error("The source is none")
92 if options.des is None:
93 parser.error("The dest is none")
94
95 Copy(options.src, options.des, options.include, options.exclude, options.regEnable)
96
97 if __name__ == "__main__":
98 ParseCmd()
99
100