#! /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, time
from stat import *

# 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 file in sys.argv[1:]:
    if len(file) > maxlen: maxlen = len(file)

# Process each argument in turn
for file in sys.argv[1:]:
    try:
        st = statfunc(file)
    except os.error, msg:
        sys.stderr.write('can\'t stat ' + `file` + ': ' + `msg` + '\n')
        status = 1
        st = ()
    if st:
        anytime = st[itime]
        size = st[ST_SIZE]
        age = now - anytime
        byteyears = float(size) * float(age) / secs_per_year
        print file.ljust(maxlen),
        print repr(int(byteyears)).rjust(8)

sys.exit(status)
