#! /usr/local/python

# findlinksto
#
# find symbolic links to a given path

import posix, path, sys

def visit(pattern, dirname, names):
	if path.islink(dirname):
		names[:] = []
		return
	if path.ismount(dirname):
		print 'descend into', dirname
	n = len(pattern)
	for name in names:
		name = path.join(dirname, name)
		try:
			linkto = posix.readlink(name)
			if linkto[:n] = pattern:
				print name, '->', linkto
		except posix.error:
			pass

def main(pattern, args):
	for dirname in args:
		path.walk(dirname, visit, pattern)

main(sys.argv[1], sys.argv[2:])
