diff options
-rwxr-xr-x | Tools/scripts/findlinksto.py | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/Tools/scripts/findlinksto.py b/Tools/scripts/findlinksto.py index 6fb5cd7..d2fc430 100755 --- a/Tools/scripts/findlinksto.py +++ b/Tools/scripts/findlinksto.py @@ -2,28 +2,41 @@ # findlinksto # -# find symbolic links to a given path +# find symbolic links to a path matching a regular expression -import os, sys +import os +import sys +import regex +import getopt -def visit(pattern, dirname, names): +def main(): + try: + opts, args = getopt.getopt(sys.argv[1:], '') + if len(args) < 2: + raise getopt.error, 'not enough arguments' + except getopt.error, msg: + sys.stdout = sys.stderr + print msg + print 'usage: findlinksto pattern directory ...' + sys.exit(2) + pat, dirs = args[0], args[1:] + prog = regex.compile(pat) + for dirname in dirs: + os.path.walk(dirname, visit, prog) + +def visit(prog, dirname, names): if os.path.islink(dirname): names[:] = [] return if os.path.ismount(dirname): print 'descend into', dirname - n = len(pattern) for name in names: name = os.path.join(dirname, name) try: linkto = os.readlink(name) - if linkto[:n] == pattern: + if prog.search(linkto) >= 0: print name, '->', linkto except os.error: pass -def main(pattern, args): - for dirname in args: - os.path.walk(dirname, visit, pattern) - -main(sys.argv[1], sys.argv[2:]) +main() |