import fnmatch import os _debug = 0 _prune = ['(*)'] def find(pattern, dir = os.curdir): list = [] names = os.listdir(dir) names.sort() for name in names: if name in (os.curdir, os.pardir): continue fullname = os.path.join(dir, name) if fnmatch.fnmatch(name, pattern): list.append(fullname) if os.path.isdir(fullname) and not os.path.islink(fullname): for p in _prune: if fnmatch.fnmatch(name, p): if _debug: print "skip", `fullname` break else: if _debug: print "descend into", `fullname` list = list + find(pattern, fullname) return list