#!/usr/bin/env python3 """Strip off the first n components of a list of pathnames on stdin.""" import os import sys def usage(retval): """Output a usage message and exit.""" if retval == 0: file_ = sys.stdout else: file_ = sys.stderr print(f'Usage: {sys.argv[0]} --count n', file=file_) print('Reads paths from stdin, one path per line, and strips off count directories on the left.', file=file_) sys.exit(retval) def main(): """Start the ball rolling.""" count = None while sys.argv[1:]: if sys.argv[1] == '--count': count = int(sys.argv[2]) del sys.argv[1] elif sys.argv[1] in ('-h', '--help'): usage(0) else: print(f'{sys.argv[0]}: Unrecognized option: {sys.argv[1]}', file=sys.stderr) usage(1) del sys.argv[1] if count is None: print(f'{sys.argv[0]}: --count is a required option', file=sys.stderr) usage(1) too_short_count = 0 for line_sans_newline in (line.lstrip("/").rstrip("\n") for line in sys.stdin): fields = line_sans_newline.split(os.path.sep) if len(fields) <= count: too_short_count += 1 continue keep_fields = fields[count:] result = os.path.join(*keep_fields) print(result) if too_short_count not in (0, 1): sys.stderr.write('Got {} too-short lines'.format(too_short_count)) sys.exit(1) main()