/Tools/scripts/findlinksto.py

http://unladen-swallow.googlecode.com/ · Python · 43 lines · 34 code · 5 blank · 4 comment · 11 complexity · a6277144931bfcf8b6332c5fc80990b8 MD5 · raw file

  1. #! /usr/bin/env python
  2. # findlinksto
  3. #
  4. # find symbolic links to a path matching a regular expression
  5. import os
  6. import sys
  7. import re
  8. import getopt
  9. def main():
  10. try:
  11. opts, args = getopt.getopt(sys.argv[1:], '')
  12. if len(args) < 2:
  13. raise getopt.GetoptError('not enough arguments', None)
  14. except getopt.GetoptError, msg:
  15. sys.stdout = sys.stderr
  16. print msg
  17. print 'usage: findlinksto pattern directory ...'
  18. sys.exit(2)
  19. pat, dirs = args[0], args[1:]
  20. prog = re.compile(pat)
  21. for dirname in dirs:
  22. os.path.walk(dirname, visit, prog)
  23. def visit(prog, dirname, names):
  24. if os.path.islink(dirname):
  25. names[:] = []
  26. return
  27. if os.path.ismount(dirname):
  28. print 'descend into', dirname
  29. for name in names:
  30. name = os.path.join(dirname, name)
  31. try:
  32. linkto = os.readlink(name)
  33. if prog.search(linkto) is not None:
  34. print name, '->', linkto
  35. except os.error:
  36. pass
  37. if __name__ == '__main__':
  38. main()