Guido van Rossum | f06ee5f | 1996-11-27 19:52:01 +0000 | [diff] [blame] | 1 | #! /usr/bin/env python |
Guido van Rossum | ec758ea | 1991-06-04 20:36:54 +0000 | [diff] [blame] | 2 | |
Guido van Rossum | bcf5012 | 1991-07-01 18:20:35 +0000 | [diff] [blame] | 3 | # Print the product of age and size of each file, in suitable units. |
Guido van Rossum | ec758ea | 1991-06-04 20:36:54 +0000 | [diff] [blame] | 4 | # |
Guido van Rossum | bcf5012 | 1991-07-01 18:20:35 +0000 | [diff] [blame] | 5 | # Usage: byteyears [ -a | -m | -c ] file ... |
| 6 | # |
| 7 | # Options -[amc] select atime, mtime (default) or ctime as age. |
Guido van Rossum | ec758ea | 1991-06-04 20:36:54 +0000 | [diff] [blame] | 8 | |
Guido van Rossum | 9a6757d | 1992-03-30 11:15:26 +0000 | [diff] [blame] | 9 | import sys, os, time |
Guido van Rossum | ec758ea | 1991-06-04 20:36:54 +0000 | [diff] [blame] | 10 | from stat import * |
| 11 | |
Guido van Rossum | bcf5012 | 1991-07-01 18:20:35 +0000 | [diff] [blame] | 12 | # Use lstat() to stat files if it exists, else stat() |
| 13 | try: |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 14 | statfunc = os.lstat |
Guido van Rossum | 9a6757d | 1992-03-30 11:15:26 +0000 | [diff] [blame] | 15 | except AttributeError: |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 16 | statfunc = os.stat |
Guido van Rossum | ec758ea | 1991-06-04 20:36:54 +0000 | [diff] [blame] | 17 | |
Guido van Rossum | bcf5012 | 1991-07-01 18:20:35 +0000 | [diff] [blame] | 18 | # Parse options |
Guido van Rossum | bdfcfcc | 1992-01-01 19:35:13 +0000 | [diff] [blame] | 19 | if sys.argv[1] == '-m': |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 20 | itime = ST_MTIME |
| 21 | del sys.argv[1] |
Guido van Rossum | bdfcfcc | 1992-01-01 19:35:13 +0000 | [diff] [blame] | 22 | elif sys.argv[1] == '-c': |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 23 | itime = ST_CTIME |
| 24 | del sys.argv[1] |
Guido van Rossum | bdfcfcc | 1992-01-01 19:35:13 +0000 | [diff] [blame] | 25 | elif sys.argv[1] == '-a': |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 26 | itime = ST_CTIME |
| 27 | del sys.argv[1] |
Guido van Rossum | bcf5012 | 1991-07-01 18:20:35 +0000 | [diff] [blame] | 28 | else: |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 29 | itime = ST_MTIME |
Guido van Rossum | bcf5012 | 1991-07-01 18:20:35 +0000 | [diff] [blame] | 30 | |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 31 | secs_per_year = 365.0 * 24.0 * 3600.0 # Scale factor |
| 32 | now = time.time() # Current time, for age computations |
| 33 | status = 0 # Exit status, set to 1 on errors |
Guido van Rossum | bcf5012 | 1991-07-01 18:20:35 +0000 | [diff] [blame] | 34 | |
| 35 | # Compute max file name length |
| 36 | maxlen = 1 |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 37 | for filename in sys.argv[1:]: |
| 38 | maxlen = max(maxlen, len(filename)) |
Guido van Rossum | bcf5012 | 1991-07-01 18:20:35 +0000 | [diff] [blame] | 39 | |
| 40 | # Process each argument in turn |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 41 | for filename in sys.argv[1:]: |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 42 | try: |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 43 | st = statfunc(filename) |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 44 | except os.error, msg: |
Walter Dörwald | 70a6b49 | 2004-02-12 17:35:32 +0000 | [diff] [blame] | 45 | sys.stderr.write("can't stat %r: %r\n" % (filename, msg)) |
Tim Peters | 70c4378 | 2001-01-17 08:48:39 +0000 | [diff] [blame] | 46 | status = 1 |
| 47 | st = () |
| 48 | if st: |
| 49 | anytime = st[itime] |
| 50 | size = st[ST_SIZE] |
| 51 | age = now - anytime |
| 52 | byteyears = float(size) * float(age) / secs_per_year |
Andrew M. Kuchling | ac6df95 | 2003-05-13 18:14:25 +0000 | [diff] [blame] | 53 | print filename.ljust(maxlen), |
Walter Dörwald | aaab30e | 2002-09-11 20:36:02 +0000 | [diff] [blame] | 54 | print repr(int(byteyears)).rjust(8) |
Guido van Rossum | ec758ea | 1991-06-04 20:36:54 +0000 | [diff] [blame] | 55 | |
| 56 | sys.exit(status) |