#! /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
import string
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 string.ljust(file, maxlen),
        print string.rjust(`int(byteyears)`, 8)

sys.exit(status)
