equal
deleted
inserted
replaced
|
1 #! /usr/bin/env python |
|
2 |
|
3 # findlinksto |
|
4 # |
|
5 # find symbolic links to a path matching a regular expression |
|
6 |
|
7 import os |
|
8 import sys |
|
9 import re |
|
10 import getopt |
|
11 |
|
12 def main(): |
|
13 try: |
|
14 opts, args = getopt.getopt(sys.argv[1:], '') |
|
15 if len(args) < 2: |
|
16 raise getopt.GetoptError('not enough arguments', None) |
|
17 except getopt.GetoptError, msg: |
|
18 sys.stdout = sys.stderr |
|
19 print msg |
|
20 print 'usage: findlinksto pattern directory ...' |
|
21 sys.exit(2) |
|
22 pat, dirs = args[0], args[1:] |
|
23 prog = re.compile(pat) |
|
24 for dirname in dirs: |
|
25 os.path.walk(dirname, visit, prog) |
|
26 |
|
27 def visit(prog, dirname, names): |
|
28 if os.path.islink(dirname): |
|
29 names[:] = [] |
|
30 return |
|
31 if os.path.ismount(dirname): |
|
32 print 'descend into', dirname |
|
33 for name in names: |
|
34 name = os.path.join(dirname, name) |
|
35 try: |
|
36 linkto = os.readlink(name) |
|
37 if prog.search(linkto) is not None: |
|
38 print name, '->', linkto |
|
39 except os.error: |
|
40 pass |
|
41 |
|
42 if __name__ == '__main__': |
|
43 main() |