| #! /usr/bin/env python3 |
| |
| # 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, os, time |
| from stat import * |
| |
| def main(): |
| |
| # Use lstat() to stat files if it exists, else stat() |
| try: |
| statfunc = os.lstat |
| except AttributeError: |
| statfunc = os.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 filename in sys.argv[1:]: |
| maxlen = max(maxlen, len(filename)) |
| |
| # Process each argument in turn |
| for filename in sys.argv[1:]: |
| try: |
| st = statfunc(filename) |
| except OSError as msg: |
| sys.stderr.write("can't stat %r: %r\n" % (filename, msg)) |
| status = 1 |
| st = () |
| if st: |
| anytime = st[itime] |
| size = st[ST_SIZE] |
| age = now - anytime |
| byteyears = float(size) * float(age) / secs_per_year |
| print(filename.ljust(maxlen), end=' ') |
| print(repr(int(byteyears)).rjust(8)) |
| |
| sys.exit(status) |
| |
| if __name__ == '__main__': |
| main() |