comparison python/multigrep.py @ 563:2daf6543e42c

adding multigrep.py
author Jeff Hammel <jhammel@mozilla.com>
date Sun, 15 Dec 2013 22:19:05 -0800
parents
children
comparison
equal deleted inserted replaced
562:8d28fce0a6d6 563:2daf6543e42c
1 #!/usr/bin/env python
2
3 """
4 grep through multiple directories
5 """
6
7 # TODO: use a python grep implemention v subshell (probably)
8
9 import optparse
10 import os
11 import subprocess
12 import sys
13
14 def main(args=sys.argv[1:]):
15
16 # CLI
17 usage = '%prog [options] PATTERN DIRECTORY [DIRECTORY] [...]'
18 parser = optparse.OptionParser(usage=usage, description=__doc__)
19 parser.add_option('-f', '--files', dest='files', default='*',
20 help="file pattern [DEFAULT: %default]")
21 parser.add_option('-g', '--grep', dest='grep',
22 action='append', default=[],
23 help="`grep` command [DEFAULT: grep]")
24 parser.add_option('-p', '--print', dest='print_commands',
25 action='store_true', default=False,
26 help="print grep commands to run and exit")
27 options, args = parser.parse_args(args)
28 if len(args) < 2:
29 parser.print_help()
30 parser.exit()
31 options.grep = options.grep or ['grep']
32 pattern, directories = args[0], args[1:]
33
34 # verify directories
35 missing = [i for i in directories
36 if not os.path.isdir(i)]
37 if missing:
38 sep = '\n '
39 parser.error("Not a directory:%s%s" % (sep, sep.join(missing)))
40
41 # build command line
42 command = options.grep[:]
43 command.extend([pattern, options.files])
44 cwd = os.getcwd()
45
46 if options.print_commands:
47 # print grep commands
48 for directory in directories:
49 print "cd %s; %s" % (repr(directory), subprocess.list2cmdline(command))
50 print "cd %s" % (repr(cwd))
51 parser.exit()
52
53 # loop through directories
54 for directory in directories:
55 print directory
56 subprocess.call(subprocess.list2cmdline(command),
57 cwd=directory,
58 shell=True)
59
60 if __name__ == '__main__':
61 main()