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:
- Recorre la lista de nombres de directorios
- Nos cambia a la ruta
- 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.
- 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