| #! /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 OSError: |
| pass |
| |
| if __name__ == '__main__': |
| main() |