# Bash y Programas

Conjunto de programas bash, Python y referencias a programas para mantenimiento, descargar contenido y otros.

# Respaldos de data de Docker

 El Bash detiene los contenedores Docker y hace una copia de un directorio a otro.

```bash
#!/bin/bash
SOURCE_DIR=""
BACKUP_DIR=""

# Guardar lista de contenedores que estaban EN EJECUCIÓN
RUNNING_CONTAINERS=$(docker ps -q)

echo "Deteniendo contenedores Docker en ejecución..."
docker stop $RUNNING_CONTAINERS

sleep 5

mkdir -p "$BACKUP_DIR"
rsync -av --delete "$SOURCE_DIR/" "$BACKUP_DIR/"

echo "Reiniciando contenedores Docker que estaban en ejecución..."
if [ -n "$RUNNING_CONTAINERS" ]; then
    docker start $RUNNING_CONTAINERS
fi
```

# Imagenes a CBZ

Este programa Python es para copiar mover todas las imágenes dentro de la misma carpeta que el archivo y comprimirlo en un archivo cbz (formato de comic o manga).

```python
import os
import zipfile

# Obtiene la ruta donde está este script Python
ruta_base = os.path.dirname(os.path.abspath(__file__))

print(f"Procesando carpetas en: {ruta_base}")

for carpeta in os.listdir(ruta_base):
    ruta_carpeta = os.path.join(ruta_base, carpeta)
    if os.path.isdir(ruta_carpeta):
        # Crear archivo CBZ (ZIP renombrado)
        nombre_cbz = f"{carpeta}.cbz"
        ruta_cbz = os.path.join(ruta_base, nombre_cbz)
        
        # Comprimir imágenes en CBZ
        with zipfile.ZipFile(ruta_cbz, 'w', zipfile.ZIP_DEFLATED) as zipf:
            for root, _, files in os.walk(ruta_carpeta):
                for file in files:
                    ruta_imagen = os.path.join(root, file)
                    # Guarda las imágenes manteniendo la estructura relativa dentro del CBZ
                    zipf.write(ruta_imagen, os.path.relpath(ruta_imagen, ruta_carpeta))
        
        print(f"Convertido: {nombre_cbz}")

print("¡Proceso completado!")
```

# Script para eliminar archivos JPG y PNG

Elimina todas las imágenes de las subcarpetas a partir de la carpeta donde se ejecutó el bash

```bash
#!/bin/bash
# Ruta por defecto (directorio actual)
RUTA="${1:-.}"
if [ ! -d "$RUTA" ]; then
    echo "Error: La ruta '$RUTA' no existe."
    exit 1
fi
echo "Buscando archivos JPG y PNG en: $RUTA"
archivos=$(find "$RUTA" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" \))
if [ -z "$archivos" ]; then
    echo "No se encontraron archivos JPG o PNG."
    exit 0
fi
echo "Se encontraron los siguientes archivos:"
echo "$archivos"
echo ""
read -p "¿Estás seguro de que quieres eliminar estos archivos? (s/N): " confirmacion
if [ "$confirmacion" = "s" ] || [ "$confirmacion" = "S" ]; then
    echo "$archivos" | while read -r archivo; do
        rm "$archivo"
        echo "Eliminado: $archivo"
    done
    echo "Archivos eliminados correctamente."
else
    echo "Operación cancelada."
fi
```