61 lines · 1.6 KB · Python
RawDownload
#! /usr/bin/env python # Print the product of age and size of each file, in suitable units.## Usage: byteyears [ -a | -m | -c ] file ...## Options -[amc] select atime, mtime (default) or ctime as age. import sys, os, timefrom stat import * def main():     # Use lstat() to stat files if it exists, else stat()    try:        statfunc = os.lstat    except AttributeError:        statfunc = os.stat     # Parse options    if sys.argv[1] == '-m':        itime = ST_MTIME        del sys.argv[1]    elif sys.argv[1] == '-c':        itime = ST_CTIME        del sys.argv[1]    elif sys.argv[1] == '-a':        itime = ST_CTIME        del sys.argv[1]    else:        itime = ST_MTIME     secs_per_year = 365.0 * 24.0 * 3600.0   # Scale factor    now = time.time()                       # Current time, for age computations    status = 0                              # Exit status, set to 1 on errors     # Compute max file name length    maxlen = 1    for filename in sys.argv[1:]:        maxlen = max(maxlen, len(filename))     # Process each argument in turn    for filename in sys.argv[1:]:        try:            st = statfunc(filename)        except os.error, msg:            sys.stderr.write("can't stat %r: %r\n" % (filename, msg))            status = 1            st = ()        if st:            anytime = st[itime]            size = st[ST_SIZE]            age = now - anytime            byteyears = float(size) * float(age) / secs_per_year            print filename.ljust(maxlen),            print repr(int(byteyears)).rjust(8)     sys.exit(status) if __name__ == '__main__':    main()