import os import shutil import datetime REPO_DIR = "/Users/davidkotnik/repos/novafarma" DESKTOP_SOURCE = "/Users/davidkotnik/Desktop/referencne slike 2" TIMESTAMP = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") BACKUP_DIR = os.path.join(REPO_DIR, f"_BACKUP_OLD_IMAGES_{TIMESTAMP}") # Extensions to move to backup (Images) IMAGE_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.tiff', '.svg'} # Helper files to move (cleanup clutter) CLUTTER_EXTENSIONS = {'.log'} CLUTTER_FILES = {'PREIMENOVANJE_SLIK_POROCILO.md', 'VISUAL_CLEANUP_REPORT.md', 'UNNAMED_IMAGES_REPORT.md', 'TENT_FOUND_REPORT.md', 'TRANSPARENCY_FIX_REPORT.md'} def is_safe_dir(dir_name): # Directories to strictly IGNORE (do not touch files inside) return dir_name not in ['.git', 'node_modules', '.agent', '_BACKUP_OLD_IMAGES_' + TIMESTAMP] def clean_and_backup(): if not os.path.exists(BACKUP_DIR): os.makedirs(BACKUP_DIR) print(f"Created backup directory: {BACKUP_DIR}") moved_count = 0 # 1. CLEANUP PHASE for root, dirs, files in os.walk(REPO_DIR): # Filter out unsafe directories from traversal dirs[:] = [d for d in dirs if is_safe_dir(d) and not d.startswith('_BACKUP')] for file in files: file_path = os.path.join(root, file) _, ext = os.path.splitext(file) should_move = False if ext.lower() in IMAGE_EXTENSIONS: should_move = True elif file in CLUTTER_FILES: should_move = True if should_move: # Calculate relative path to maintain structure in backup? # Or just flat dump to avoid empty folder issues? # User said "vse slike stran", "clean map". Flat dump or simple structure is fine. # Let's preserve structure in backup just in case. rel_path = os.path.relpath(root, REPO_DIR) dest_dir = os.path.join(BACKUP_DIR, rel_path) if not os.path.exists(dest_dir): os.makedirs(dest_dir) shutil.move(file_path, os.path.join(dest_dir, file)) moved_count += 1 print(f"Moved to backup: {file}") # 2. DELETE EMPTY FOLDERS removed_dirs = 0 for root, dirs, files in os.walk(REPO_DIR, topdown=False): if root == REPO_DIR: continue # Don't delete .git or criticals if '.git' in root or 'node_modules' in root or '_BACKUP' in root: continue try: # If directory is empty if not os.listdir(root): os.rmdir(root) removed_dirs += 1 print(f"Removed empty dir: {root}") except OSError: pass print(f"\nCleanup Complete. Moved {moved_count} files to backup. Removed {removed_dirs} empty directories.") # 3. FRESH START POPULATION # Ensure assets dir exists ASSETS_DIR = os.path.join(REPO_DIR, "assets") if not os.path.exists(ASSETS_DIR): os.makedirs(ASSETS_DIR) print("\nPopulating assets from Desktop source...") copied_count = 0 for file in os.listdir(DESKTOP_SOURCE): if file.lower().endswith(('.jpg', '.png', '.jpeg')): src = os.path.join(DESKTOP_SOURCE, file) dst = os.path.join(ASSETS_DIR, file) shutil.copy2(src, dst) copied_count += 1 print(f"Copied {copied_count} fresh images to {ASSETS_DIR}") if __name__ == "__main__": clean_and_backup()