14
|
1 #!/usr/bin/env python
|
|
2 # -*- coding: utf-8 -*-
|
|
3
|
|
4 """
|
|
5 gather files for processing
|
|
6 """
|
|
7
|
|
8 import argparse
|
|
9 import os
|
|
10 import subprocess
|
|
11 import sys
|
|
12
|
|
13 __all__ = ['find', 'main']
|
|
14 string = (str, unicode)
|
|
15
|
|
16 def find(directories, filenames=None, exts=None):
|
|
17 """gather files from directories"""
|
|
18
|
|
19
|
|
20 retval = []
|
|
21 if isinstance(directories, string):
|
|
22 directories = [directories]
|
|
23
|
|
24 directories = [os.path.abspath(d) for d in directories]
|
|
25
|
|
26 for d in directories:
|
|
27
|
|
28 if not os.path.exists(d):
|
|
29 continue
|
|
30 if not os.path.isdir(d):
|
|
31 retval.append(d)
|
|
32 continue
|
|
33
|
|
34 for item in sorted(os.listdir(d)):
|
|
35 path = os.path.join(d, item)
|
|
36
|
|
37 if os.path.isdir(path):
|
|
38 retval.extend(find(path, filenames=filenames, exts=exts))
|
|
39 else:
|
|
40 if filenames:
|
|
41 if item in filenames:
|
|
42 retval.append(path)
|
|
43 elif exts:
|
|
44 for ext in exts:
|
|
45 if path.endswith(ext):
|
|
46 retval.append(path)
|
|
47 break
|
|
48 else:
|
|
49 retval.append(path)
|
|
50
|
|
51 return retval
|
|
52
|
|
53
|
|
54 def main(args=sys.argv[1:]):
|
|
55 """CLI"""
|
|
56
|
|
57 # parse command line
|
|
58 parser = argparse.ArgumentParser(description=__doc__)
|
|
59 parser.add_argument('path', nargs='+', help="paths")
|
|
60 parser.add_argument('-e', '--ext', dest='exts',
|
|
61 nargs='+', help='extensions')
|
|
62 options = parser.parse_args(args)
|
|
63
|
|
64 # gather
|
|
65 paths = find(options.path, exts=options.exts)
|
|
66
|
|
67 # scatter
|
|
68 print ('\n'.join(paths))
|
|
69
|
|
70 if __name__ == '__main__':
|
|
71 main()
|