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