| 
									
										
										
										
											2010-03-11 22:53:45 +00:00
										 |  |  | #! /usr/bin/env python3 | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-07-01 18:20:35 +00:00
										 |  |  | # Print the product of age and size of each file, in suitable units. | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											1991-07-01 18:20:35 +00:00
										 |  |  | # Usage: byteyears [ -a | -m | -c ] file ... | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Options -[amc] select atime, mtime (default) or ctime as age. | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1992-03-30 11:15:26 +00:00
										 |  |  | import sys, os, time | 
					
						
							| 
									
										
										
										
											1991-06-04 20:36:54 +00:00
										 |  |  | from stat import * | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-09 17:27:55 +00:00
										 |  |  | def main(): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Use lstat() to stat files if it exists, else stat() | 
					
						
							| 
									
										
										
										
											2001-01-17 08:48:39 +00:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2004-08-09 17:27:55 +00:00
										 |  |  |         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) | 
					
						
							| 
									
										
										
										
											2012-12-24 19:58:48 +02:00
										 |  |  |         except OSError as msg: | 
					
						
							| 
									
										
										
										
											2004-08-09 17:27:55 +00:00
										 |  |  |             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 | 
					
						
							| 
									
										
										
										
											2007-08-03 17:06:41 +00:00
										 |  |  |             print(filename.ljust(maxlen), end=' ') | 
					
						
							|  |  |  |             print(repr(int(byteyears)).rjust(8)) | 
					
						
							| 
									
										
										
										
											2004-08-09 17:27:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     sys.exit(status) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     main() |