#!/bin/bash # purge-obsolete.sh - EPIC-008 # Elimina archivos obsoletos de un proyecto de forma segura # Version: 1.0.0 PROJECT=$1 MODE=${2:---dry-run} PROJECT_PATH="/home/isem/workspace-v1/projects/$PROJECT" LOG_FILE="$PROJECT_PATH/PURGE-LOG.yml" # Colores RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Validar argumento if [ -z "$PROJECT" ]; then echo -e "${RED}ERROR: Uso: $0 [--dry-run | --execute]${NC}" echo " --dry-run : Solo muestra lo que se eliminaria (default)" echo " --execute : Ejecuta la eliminacion" echo "" echo "Ejemplo: $0 gamilit --dry-run" exit 1 fi # Validar proyecto existe if [ ! -d "$PROJECT_PATH" ]; then echo -e "${RED}ERROR: Proyecto '$PROJECT' no existe${NC}" exit 1 fi echo "=== PURGA DE ARCHIVOS OBSOLETOS: $PROJECT ===" echo -e "Modo: ${BLUE}$MODE${NC}" echo "" # Buscar archivos obsoletos (excluyendo apps/ y database/) echo "Buscando archivos obsoletos en docs/ y orchestration/..." OBSOLETE_FILES="" # Buscar en docs/ if [ -d "$PROJECT_PATH/docs" ]; then DOCS_OBSOLETE=$(find "$PROJECT_PATH/docs" -type f \( \ -name "*.old" -o \ -name "*.backup" -o \ -name "*.bak" -o \ -name "*LEGACY*" -o \ -name "OLD-*" -o \ -name "DEPRECATED-*" -o \ -name ".DS_Store" -o \ -name "Thumbs.db" -o \ -name "*~" \ \) 2>/dev/null || true) OBSOLETE_FILES+="$DOCS_OBSOLETE" fi # Buscar en orchestration/ if [ -d "$PROJECT_PATH/orchestration" ]; then ORCH_OBSOLETE=$(find "$PROJECT_PATH/orchestration" -type f \( \ -name "*.old" -o \ -name "*.backup" -o \ -name "*.bak" -o \ -name "*LEGACY*" -o \ -name "OLD-*" -o \ -name "DEPRECATED-*" -o \ -name ".DS_Store" -o \ -name "Thumbs.db" -o \ -name "*~" \ \) 2>/dev/null || true) if [ -n "$ORCH_OBSOLETE" ]; then OBSOLETE_FILES+=$'\n'"$ORCH_OBSOLETE" fi fi # Filtrar lineas vacias OBSOLETE_FILES=$(echo "$OBSOLETE_FILES" | grep -v '^$' || true) # Contar archivos COUNT=0 if [ -n "$OBSOLETE_FILES" ]; then COUNT=$(echo "$OBSOLETE_FILES" | wc -l) fi echo "Archivos obsoletos encontrados: $COUNT" echo "" # Si no hay archivos, generar log vacio y salir if [ "$COUNT" -eq 0 ]; then echo -e "${GREEN}No hay archivos obsoletos para eliminar.${NC}" cat > "$LOG_FILE" << EOF # Log de purga generado por EPIC-008 proyecto: $PROJECT fecha: "$(date +%Y-%m-%d)" modo: "$MODE" archivos_eliminados: [] total_eliminados: 0 espacio_liberado: "0KB" estado: "sin_cambios" EOF echo "" echo "Log generado: $LOG_FILE" exit 0 fi # Mostrar archivos encontrados echo -e "${YELLOW}Archivos a eliminar:${NC}" TOTAL_SIZE=0 echo "$OBSOLETE_FILES" | while read -r file; do if [ -n "$file" ] && [ -f "$file" ]; then size=$(du -h "$file" 2>/dev/null | cut -f1) # Mostrar ruta relativa para mejor legibilidad rel_path=${file#$PROJECT_PATH/} echo " - $rel_path ($size)" fi done echo "" # Ejecutar segun modo if [ "$MODE" == "--execute" ]; then echo -e "${YELLOW}EJECUTANDO eliminacion...${NC}" echo "" # Iniciar log cat > "$LOG_FILE" << EOF # Log de purga generado por EPIC-008 proyecto: $PROJECT fecha: "$(date +%Y-%m-%d)" modo: "execute" archivos_eliminados: EOF DELETED=0 echo "$OBSOLETE_FILES" | while read -r file; do if [ -n "$file" ] && [ -f "$file" ]; then size=$(du -h "$file" 2>/dev/null | cut -f1) rel_path=${file#$PROJECT_PATH/} # Eliminar archivo rm "$file" # Registrar en log echo " - archivo: \"$rel_path\"" >> "$LOG_FILE" echo " tamano: \"$size\"" >> "$LOG_FILE" echo " eliminado: true" >> "$LOG_FILE" echo -e " ${RED}ELIMINADO${NC}: $rel_path" DELETED=$((DELETED + 1)) fi done # Cerrar log cat >> "$LOG_FILE" << EOF total_eliminados: $COUNT estado: "completado" EOF echo "" echo -e "${GREEN}Purga completada.${NC}" echo "Archivos eliminados: $COUNT" echo "Log: $LOG_FILE" else # Modo dry-run echo -e "${BLUE}[DRY-RUN] No se eliminaron archivos.${NC}" echo "Ejecutar con --execute para eliminar." # Generar log preview cat > "$LOG_FILE" << EOF # Log de purga generado por EPIC-008 proyecto: $PROJECT fecha: "$(date +%Y-%m-%d)" modo: "dry-run" archivos_a_eliminar: $COUNT preview: true archivos_detectados: EOF echo "$OBSOLETE_FILES" | while read -r file; do if [ -n "$file" ]; then rel_path=${file#$PROJECT_PATH/} echo " - \"$rel_path\"" >> "$LOG_FILE" fi done echo "" echo "Preview guardado: $LOG_FILE" fi