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
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