mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#! /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()
 |