Show More
@@ -1,6 +1,6 b'' | |||
|
1 | 1 | #!/usr/bin/env python |
|
2 | 2 | |
|
3 | """ mglob - enhanced file list expansion module | |
|
3 | r""" mglob - enhanced file list expansion module | |
|
4 | 4 | |
|
5 | 5 | Use as stand-alone utility (for xargs, `backticks` etc.), |
|
6 | 6 | or a globbing library for own python programs. Globbing the sys.argv is something |
@@ -51,6 +51,9 b' Supported syntax in globs (wilcard matching patterns)::' | |||
|
51 | 51 | - File foo, or all files in dir foo |
|
52 | 52 | !*.bak readme* |
|
53 | 53 | - readme*, exclude files ending with .bak |
|
54 | !.svn/ !.hg/ !*_Data/ rec:. | |
|
55 | - Skip .svn, .hg, foo_Data dirs (and their subdirs) in recurse. | |
|
56 | Trailing / is the key, \ does not work! | |
|
54 | 57 | dir:foo |
|
55 | 58 | - the directory foo (not files in foo) |
|
56 | 59 | dir:* |
@@ -69,16 +72,6 b' __version__ = "0.2"' | |||
|
69 | 72 | import os,glob,fnmatch,sys |
|
70 | 73 | from sets import Set as set |
|
71 | 74 | |
|
72 | def recfind(p, pats = ["*"]): | |
|
73 | for (dp,dnames,fnames) in os.walk(p): | |
|
74 | for f in fnames: | |
|
75 | matched = False | |
|
76 | for p in pats: | |
|
77 | if fnmatch.fnmatch(f,p): | |
|
78 | matched = True | |
|
79 | break | |
|
80 | if matched: | |
|
81 | yield os.path.join(dp,f) | |
|
82 | 75 | |
|
83 | 76 | def expand(flist): |
|
84 | 77 | """ Expand the glob(s) in flist. |
@@ -91,6 +84,32 b' def expand(flist):' | |||
|
91 | 84 | flist = flist.split() |
|
92 | 85 | done_set = set() |
|
93 | 86 | denied_set = set() |
|
87 | ||
|
88 | def recfind(p, pats = ["*"]): | |
|
89 | denied_dirs = ["*" + d+"*" for d in denied_set if d.endswith("/")] | |
|
90 | #print "de", denied_dirs | |
|
91 | for (dp,dnames,fnames) in os.walk(p): | |
|
92 | # see if we should ignore the whole directory | |
|
93 | dp_norm = dp.replace("\\","/") + "/" | |
|
94 | deny = False | |
|
95 | #print "dp",dp | |
|
96 | for deny_pat in denied_dirs: | |
|
97 | if fnmatch.fnmatch( dp_norm, deny_pat): | |
|
98 | deny = True | |
|
99 | break | |
|
100 | if deny: | |
|
101 | continue | |
|
102 | ||
|
103 | ||
|
104 | for f in fnames: | |
|
105 | matched = False | |
|
106 | for p in pats: | |
|
107 | if fnmatch.fnmatch(f,p): | |
|
108 | matched = True | |
|
109 | break | |
|
110 | if matched: | |
|
111 | yield os.path.join(dp,f) | |
|
112 | ||
|
94 | 113 | def once_filter(seq): |
|
95 | 114 | for it in seq: |
|
96 | 115 | p = os.path.abspath(it) |
@@ -164,8 +183,11 b' def main():' | |||
|
164 | 183 | |
|
165 | 184 | print "\n".join(expand(sys.argv[1:])), |
|
166 | 185 | |
|
167 |
def mglob_f(self, arg): |
|
|
168 | return expand(arg) | |
|
186 | def mglob_f(self, arg): | |
|
187 | if arg.strip(): | |
|
188 | return expand(arg) | |
|
189 | print "Please specify pattern!" | |
|
190 | print globsyntax | |
|
169 | 191 | |
|
170 | 192 | def ipython_install(): |
|
171 | 193 | """ register %mglob for IPython """ |
General Comments 0
You need to be logged in to leave comments.
Login now