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 re 10import getopt 11 12def 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 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) is not None: 38 print name, '->', linkto 39 except os.error: 40 pass 41 42if __name__ == '__main__': 43 main() 44