equal
deleted
inserted
replaced
|
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 |
|
9 import sys, os, time |
|
10 from stat import * |
|
11 |
|
12 def main(): |
|
13 |
|
14 # Use lstat() to stat files if it exists, else stat() |
|
15 try: |
|
16 statfunc = os.lstat |
|
17 except AttributeError: |
|
18 statfunc = os.stat |
|
19 |
|
20 # Parse options |
|
21 if sys.argv[1] == '-m': |
|
22 itime = ST_MTIME |
|
23 del sys.argv[1] |
|
24 elif sys.argv[1] == '-c': |
|
25 itime = ST_CTIME |
|
26 del sys.argv[1] |
|
27 elif sys.argv[1] == '-a': |
|
28 itime = ST_CTIME |
|
29 del sys.argv[1] |
|
30 else: |
|
31 itime = ST_MTIME |
|
32 |
|
33 secs_per_year = 365.0 * 24.0 * 3600.0 # Scale factor |
|
34 now = time.time() # Current time, for age computations |
|
35 status = 0 # Exit status, set to 1 on errors |
|
36 |
|
37 # Compute max file name length |
|
38 maxlen = 1 |
|
39 for filename in sys.argv[1:]: |
|
40 maxlen = max(maxlen, len(filename)) |
|
41 |
|
42 # Process each argument in turn |
|
43 for filename in sys.argv[1:]: |
|
44 try: |
|
45 st = statfunc(filename) |
|
46 except os.error, msg: |
|
47 sys.stderr.write("can't stat %r: %r\n" % (filename, msg)) |
|
48 status = 1 |
|
49 st = () |
|
50 if st: |
|
51 anytime = st[itime] |
|
52 size = st[ST_SIZE] |
|
53 age = now - anytime |
|
54 byteyears = float(size) * float(age) / secs_per_year |
|
55 print filename.ljust(maxlen), |
|
56 print repr(int(byteyears)).rjust(8) |
|
57 |
|
58 sys.exit(status) |
|
59 |
|
60 if __name__ == '__main__': |
|
61 main() |