viernes, 6 de junio de 2025

Script bash para comprimir cada directorios de la ruta actual en un archivo zip independiente

Supongamos que tenemos, en una ruta determinada de nuestro disco, varias carpetas cada una con los archivos correspondientes a un determinado programa y queremos que el contenido de cada una se guarde en un archivo zip independiente, lo podíamos hacer con un script como éste:

#!/bin/bash
for dir in */; do
    dirname=$(basename "${dir}")
    cd ${dir}
    zip -r "../${dirname}.zip" .
    cd ..
done

El script hace lo siguiente:

  1. Recorre la lista de nombres de directorios
  2. Nos cambia a la ruta
  3. Comprime el contenido en un archivo zip con el mismo nombre que el directorio y guardándolo en un nivel inferior de la ruta, es decir, donde ejecutamos el script.
  4. Vuelve a la ruta original, bajando un nivel.

Este script lo copiaría con el nombre dir2zip en la ruta /usr/local/bin para que esté disponible desde cualquier lugar de nuestro disco, ya que debe ejecutarse desde el mismo directorio.

Se puede mejorar fácilmente para que haga otras cosas:

  • Pasar la ruta opcionalmente como parámetro.
  • Comprimir solo un nivel e ir ejecutándose recursivamente, si esa es nuestra necesidad.
  • Borrar la carpeta después de una compresión exitosa.

Si se te ocurre maneras de mejorar en el script exponlas en los comentarios y así seguimos aprendiendo entre todos.

Quien sabe lo mismo me animo y explico más adelante como hacer el script contrario: zip2dir.

No hay comentarios:

Publicar un comentario