#!/usr/bin/python3 """Get directory sizes from a list of full paths to regular files.""" import collections import errno import os import sys sys.path.insert(0, '/usr/local/lib') sys.path.insert(0, os.path.expanduser('~/lib')) import readline0 # noqa: ignore=E402 def main(): """Compute sizes of directories on stdin.""" size_dict = collections.defaultdict(int) for full_path in readline0.readline0(file_=0): directory = os.path.dirname(full_path) try: stat_data = os.lstat(full_path) except OSError: try: os.write(2, b'Could not lstat %s\n' % full_path) except OSError as exc: if exc.errno != errno.EPIPE: raise # otherwise fall through and continue continue size_dict[directory] += stat_data.st_size for directory, size in size_dict.items(): try: os.write(1, bytes(str(size), 'ASCII') + b' ' + directory + b'\n') except OSError as exc: if exc.errno != errno.EPIPE: raise main()