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