| #! /usr/bin/env python3 | 
 |  | 
 | # findlinksto | 
 | # | 
 | # find symbolic links to a path matching a regular expression | 
 |  | 
 | import os | 
 | import sys | 
 | import re | 
 | import getopt | 
 |  | 
 | def main(): | 
 |     try: | 
 |         opts, args = getopt.getopt(sys.argv[1:], '') | 
 |         if len(args) < 2: | 
 |             raise getopt.GetoptError('not enough arguments', None) | 
 |     except getopt.GetoptError as msg: | 
 |         sys.stdout = sys.stderr | 
 |         print(msg) | 
 |         print('usage: findlinksto pattern directory ...') | 
 |         sys.exit(2) | 
 |     pat, dirs = args[0], args[1:] | 
 |     prog = re.compile(pat) | 
 |     for dirname in dirs: | 
 |         os.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) | 
 |     for name in names: | 
 |         name = os.path.join(dirname, name) | 
 |         try: | 
 |             linkto = os.readlink(name) | 
 |             if prog.search(linkto) is not None: | 
 |                 print(name, '->', linkto) | 
 |         except os.error: | 
 |             pass | 
 |  | 
 | if __name__ == '__main__': | 
 |     main() |