mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#! /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()
 |