|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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() |
|
|
|