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

# Use lstat() to stat files if it exists, else stat()
try:
	statfunc = posix.lstat
except NameError:
	statfunc = posix.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 posix.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)
