Commits

Anonymous committed 7a35d98

Add options -amc; do lstat if possible; columnize properly.

  • Participants
  • Parent commits d7a38de
  • Branches legacy-trunk

Comments (0)

Files changed (1)

File Tools/scripts/byteyears.py

 #! /usr/local/python
 
-# byteyears file ...
+# Print the product of age and size of each file, in suitable units.
 #
-# Print a number representing 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 *
 
-secs_per_year = 365.0 * 24.0 * 3600.0
-now = time.time()
-status = 0
+# 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 = posix.stat(file)
+		st = statfunc(file)
 	except posix.error, msg:
 		sys.stderr.write('can\'t stat ' + `file` + ': ' + `msg` + '\n')
 		status = 1
 		st = ()
 	if st:
-		mtime = st[ST_MTIME]
+		anytime = st[itime]
 		size = st[ST_SIZE]
-		age = now - mtime
+		age = now - anytime
 		byteyears = float(size) * float(age) / secs_per_year
-		print file + '\t\t' + `int(byteyears)`
+		print string.ljust(file, maxlen),
+		print string.rjust(`int(byteyears)`, 8)
 
 sys.exit(status)