#!/usr/bin/env python3
# runs du and sorts the output while suppressing any error messages from du

from quantiphy import Quantity
from inform import display, fatal, os_error
from shlib import Run
import sys

try:
    du = Run(['du', '-xd1'] + sys.argv[1:], modes='sWEO1')

    files = []
    for line in du.stdout.splitlines():
        if line:
            size, _, filename = line.partition('\t')
            files += [(Quantity(size, scale=(1024, 'B')), filename)]

    files.sort(key=lambda x: x[0])

    for size, name in files:
        display('{:8.2b}  {}'.format(size, name))

except OSError as err:
    fatal(os_error(err))
except KeyboardInterrupt:
    display('dus: killed by user.')
