byteyears.py revision f06ee5fa072931fc807527535c91a46c149a6746
1#! /usr/bin/env python 2 3# Print the product of age and size of each file, in suitable units. 4# 5# Usage: byteyears [ -a | -m | -c ] file ... 6# 7# Options -[amc] select atime, mtime (default) or ctime as age. 8 9import sys, os, time 10import string 11from stat import * 12 13# Use lstat() to stat files if it exists, else stat() 14try: 15 statfunc = os.lstat 16except AttributeError: 17 statfunc = os.stat 18 19# Parse options 20if sys.argv[1] == '-m': 21 itime = ST_MTIME 22 del sys.argv[1] 23elif sys.argv[1] == '-c': 24 itime = ST_CTIME 25 del sys.argv[1] 26elif sys.argv[1] == '-a': 27 itime = ST_CTIME 28 del sys.argv[1] 29else: 30 itime = ST_MTIME 31 32secs_per_year = 365.0 * 24.0 * 3600.0 # Scale factor 33now = time.time() # Current time, for age computations 34status = 0 # Exit status, set to 1 on errors 35 36# Compute max file name length 37maxlen = 1 38for file in sys.argv[1:]: 39 if len(file) > maxlen: maxlen = len(file) 40 41# Process each argument in turn 42for file in sys.argv[1:]: 43 try: 44 st = statfunc(file) 45 except os.error, msg: 46 sys.stderr.write('can\'t stat ' + `file` + ': ' + `msg` + '\n') 47 status = 1 48 st = () 49 if st: 50 anytime = st[itime] 51 size = st[ST_SIZE] 52 age = now - anytime 53 byteyears = float(size) * float(age) / secs_per_year 54 print string.ljust(file, maxlen), 55 print string.rjust(`int(byteyears)`, 8) 56 57sys.exit(status) 58