| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #! /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()
|