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