49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| import os
 | |
| import argparse
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     parser = argparse.ArgumentParser(
 | |
|         description="Retain specified number of files in a directory sorted by name, delete others."
 | |
|     )
 | |
|     parser.add_argument("directory", type=str, help="Path to target directory")
 | |
|     parser.add_argument(
 | |
|         "--keep", type=int, default=2, help="Number of files to retain (default: 2)"
 | |
|     )
 | |
|     args = parser.parse_args()
 | |
| 
 | |
|     # Validate arguments
 | |
|     if args.keep < 0:
 | |
|         parser.error("--keep value cannot be negative")
 | |
| 
 | |
|     if not os.path.isdir(args.directory):
 | |
|         parser.error(f"Directory not found: {args.directory}")
 | |
| 
 | |
|     # Get list of files (exclude subdirectories)
 | |
|     files = []
 | |
|     with os.scandir(args.directory) as entries:
 | |
|         for entry in entries:
 | |
|             if entry.is_file():
 | |
|                 files.append(entry.name)
 | |
| 
 | |
|     # Sort files alphabetically
 | |
|     sorted_files = sorted(files)
 | |
| 
 | |
|     # Identify files to delete
 | |
|     to_delete = sorted_files[:-args.keep] if args.keep > 0 else sorted_files.copy()
 | |
| 
 | |
|     # Delete files and print results
 | |
|     for filename in to_delete:
 | |
|         filepath = os.path.join(args.directory, filename)
 | |
|         try:
 | |
|             os.remove(filepath)
 | |
|             print(f"Deleted: {filename}")
 | |
|         except Exception as e:
 | |
|             print(f"Error deleting {filename}: {str(e)}")
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |