55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/python
 | |
| 
 | |
| import os
 | |
| import time
 | |
| import re
 | |
| import sys
 | |
| from datetime import datetime, timedelta
 | |
| 
 | |
| def list_unused_packages(days):
 | |
|     '''
 | |
|     list packages not acessed in arch for n days
 | |
|     it checks if any of files in package were acessed before n days,
 | |
|     if not add it to list of unused_packages.
 | |
|     '''
 | |
|     lt_time = datetime.now() - timedelta(days=days)
 | |
|     epoch_lt_time = time.mktime(lt_time.timetuple())
 | |
| 
 | |
|     # get list of installed packages
 | |
|     installed_packages = os.popen('pacman -Q').read().split('\n')[:-1]
 | |
| 
 | |
| 
 | |
|     unused_packages = []
 | |
|     for package in installed_packages:
 | |
|         # get files of package
 | |
|         files = os.popen('pacman -Ql ' + re.match('^.* ', package).group())
 | |
|         files = files.read().split('\n')[:-1]
 | |
|         acessed = False
 | |
|         for path in files:
 | |
|             valid_file = re.search(' (.*\w)$', path) # exclude directories
 | |
|             if valid_file:
 | |
|                 try:
 | |
|                     atime = os.path.getatime(valid_file.group(1))
 | |
|                     if atime > epoch_lt_time:
 | |
|                         acessed = True
 | |
|                         break
 | |
|                 except OSError:
 | |
|                     # broken symlink?
 | |
|                     pass
 | |
|         if not acessed:
 | |
|             unused_packages.append(package)
 | |
| 
 | |
|     return unused_packages
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     try:
 | |
|         unused_packages = list_unused_packages(int(sys.argv[1]))
 | |
|         print ('\n'.join(unused_packages))
 | |
|         if unused_packages:
 | |
|             print ('packages not used for at least {0} days'.format(sys.argv[1]))
 | |
|         else:
 | |
|             print ('all packages were acessed.')
 | |
|     except IndexError:
 | |
|         print ('usage: unused_packages days')
 |