blob: d2fc430b282fd1a8ed98de2485cf99777a1c9a8e [file] [log] [blame]
Guido van Rossum41ffccb1993-04-01 20:50:35 +00001#! /usr/local/bin/python
Guido van Rossumec758ea1991-06-04 20:36:54 +00002
3# findlinksto
4#
Guido van Rossum5ec8b521994-01-21 15:47:00 +00005# find symbolic links to a path matching a regular expression
Guido van Rossumec758ea1991-06-04 20:36:54 +00006
Guido van Rossum5ec8b521994-01-21 15:47:00 +00007import os
8import sys
9import regex
10import getopt
Guido van Rossumec758ea1991-06-04 20:36:54 +000011
Guido van Rossum5ec8b521994-01-21 15:47:00 +000012def main():
13 try:
14 opts, args = getopt.getopt(sys.argv[1:], '')
15 if len(args) < 2:
16 raise getopt.error, 'not enough arguments'
17 except getopt.error, 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 = regex.compile(pat)
24 for dirname in dirs:
25 os.path.walk(dirname, visit, prog)
26
27def visit(prog, dirname, names):
Guido van Rossum391b8b71992-03-30 11:14:36 +000028 if os.path.islink(dirname):
Guido van Rossumec758ea1991-06-04 20:36:54 +000029 names[:] = []
30 return
Guido van Rossum391b8b71992-03-30 11:14:36 +000031 if os.path.ismount(dirname):
Guido van Rossumec758ea1991-06-04 20:36:54 +000032 print 'descend into', dirname
Guido van Rossumec758ea1991-06-04 20:36:54 +000033 for name in names:
Guido van Rossum391b8b71992-03-30 11:14:36 +000034 name = os.path.join(dirname, name)
Guido van Rossumec758ea1991-06-04 20:36:54 +000035 try:
Guido van Rossum391b8b71992-03-30 11:14:36 +000036 linkto = os.readlink(name)
Guido van Rossum5ec8b521994-01-21 15:47:00 +000037 if prog.search(linkto) >= 0:
Guido van Rossumec758ea1991-06-04 20:36:54 +000038 print name, '->', linkto
Guido van Rossum391b8b71992-03-30 11:14:36 +000039 except os.error:
Guido van Rossumec758ea1991-06-04 20:36:54 +000040 pass
41
Guido van Rossum5ec8b521994-01-21 15:47:00 +000042main()