diff --git a/README.md b/README.md index 5f10e2a..6339203 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ # lstrend -Show trend data for files changing size \ No newline at end of file +Show trend data for files changing size + +usage: lstrend [-h] files [files ...] + diff --git a/lstrend b/lstrend new file mode 100755 index 0000000..6b20deb --- /dev/null +++ b/lstrend @@ -0,0 +1,55 @@ +#!/usr/bin/python3 + +import argparse +import os +import time + +factor = 0.99 + +def get_sizes(files): + sizes = [] + for file in files: + sizes.append(os.path.getsize(file)) + return sizes + +def human_format(num): + num = float('{:.3g}'.format(num)) + magnitude = 0 + while abs(num) >= 1024: + magnitude += 1 + num /= 1024.0 + return '{}{}'.format('{:.3f}'.format(num).rstrip('0').rstrip('.'), ['', 'K', 'M', 'G', 'T', 'P'][magnitude]) + +def lstrend(files): + avgrates = None + sizes = None + stamp = None + while True: + lastsizes = sizes + laststamp = stamp + sizes = get_sizes(files) + stamp = time.monotonic() + if lastsizes: + diffs = [s-lastsizes[c] for c,s in enumerate(sizes)] + tdelta = stamp-laststamp + rates = [s/tdelta for s in diffs] + if avgrates: + avgrates = [avgrates[c]*factor+r*(1-factor) for c,r in enumerate(rates)] + else: + avgrates = rates + print() + for c,file in enumerate(files): + print("{: <20} {: >10} {: >10}".format(file, human_format(avgrates[c]), human_format(sizes[c]))) + time.sleep(1) + + +def main(): + parser = argparse.ArgumentParser(description='Show trend in file size') + parser.add_argument('files', nargs='+', help='files to list') + + args = parser.parse_args() + + lstrend(args.files) + +if __name__ == "__main__": + main()