| #! /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) |