findlinksto.py revision 70c4378dbcfdcbeef6fb3aa348f32ed862fe8eb7
1#! /usr/bin/env python 2 3# findlinksto 4# 5# find symbolic links to a path matching a regular expression 6 7import os 8import sys 9import regex 10import getopt 11 12def 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): 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) >= 0: 38 print name, '->', linkto 39 except os.error: 40 pass 41 42main() 43