Compress, un programa para hacer paquetes tar
Los que trabajamos con sistemas GNU/Linux, con mucha frecuencia, descargamos software empaquetado en «tarball» o paquetes tar. En este artículo vemos un programa para crearlos y para desempaquetarlos.
Sumario
- Paquetes tar
- Funcionamiento del programa
- Consideraciones finales
- Código fuente
Paquetes tar
Un fichero «.tar», es una colección de ficheros que posteriormente se comprime. El nombre viene de «Tape ARchive» o archivo de cinta, de los tiempos en que se almacenaba la información en cintas magnéticas. El «.tar» no esta comprimido, pero tiene una utilidad de compresión llamada «gzip», que comprime el paquete convirtiéndolo en un «.tar.gz». Comprimir los ficheros como un único grupo permite utilizar métodos de compresión más eficientes, ahorrando así espacio y reduciendo el tamaño total del fichero.
El comando «tar» es una herramienta muy práctica para comprimir ficheros, incluso para hacer paquetes de ficheros y comprimir estos. Este sistema de compresión es altamente eficiente pues llega a conseguir compresión de hasta un 50%. Ayudándonos de este comando creamos un programa para trabajar con ficheros de forma muy sencilla.
Desde ficheros de video, imágenes, documentos o paquetes de software completos, se comprimen para almacenarlos o transmitirlos con menos peso con el formato «.tar.gz». Seguro que conoces programas para este fin: 7z, bz2, bzip2, Brotli y zstd son algunos de ellos. Uno de los formatos más conocidos es «.zip», pero este formato actúa únicamente sobre ficheros individuales y no permite hacer paquetes.
A diferencia de los ficheros «.zip», los «.tar.gz» comprimen ficheros grandes en un solo paquete, por ello se ha convertido en una extensión de fichero común para los paquetes de software de código abierto. Además el «.tar.gz» dispone de características adicionales que lo convierten en el mejor formato de compresión.
Conforme el software se hace más y más potente, y almacenamos más información, se hace necesario el uso de compresión, tanto para almacenar como para enviar ficheros. No obstante, para los menos conocedores del software libre, es poco intuitivo comprimir y extraer estos ficheros. Por eso pongo a tu disposición este pequeño script que te facilitará las cosas.
Funcionamiento del programa
Vamos a ejecutar el programa Compress, un programa para hacer paquetes tar, y lo vamos viendo. Luego aportaré el código para que solo tengas que copiar y pegar para probarlo o usarlo. Lo hago con Debian 11 pero te funcionará igual con cualquier derivado como Ubuntu y todos sus sabores, Linux Mint, Kali Linux, Purism PureOS, Raspberry Pi OS, Deepin, MX Linux, etc…hasta más de 80 distribuciones.

Como ves, tenemos en el «directorio Compresor», el fichero con el programa, varios documentos de texto y un directorio «Almacenamiento» donde guardaremos el paquete «.tar.gz». Una vez ejecutamos el programa vemos lo siguiente,

Como nos dice es un «programa para crear un paquete tar incluyendo los ficheros que indiques y comprimirlo. Puedes elegir la ubicación de dicho paquete y desempaquetarlo donde tu quieras.»
Al elegir la primera opción, nos pide el nombre del fichero a crear. En este caso lo llamaré «Paquete». Solicita la ubicación donde guardarlo. Elijo la ruta «/home/javier/Compresor/Almacenamiento». Ahora añadimos los ficheros que incluir en el paquete. En mi caso «prueba.txt», «prueba1.txt» y «prueba2.txt».

Una vez clicamos en «Intro», nos indica los ficheros que se van a incluir, que el paquete se ha creado y la ruta donde lo encontraremos. Finalmente nos muestra el contenido del paquete.

Una vez creado y guardado nos pregunta si queremos continuar. Le vamos a decir que sí y descomprimiremos el paquete en el mismo directorio donde lo tenemos, aunque le podemos decir el directorio que queramos.
Nos pregunta por la ubicación en la queremos descomprimir el paquete y realiza su trabajo. Nos muestra el contenido del paquete y el del directorio donde lo hemos extraído.

Una vez ha terminado nos vuelve a preguntar si queremos continuar. Le decimos que no y sale del programa mostrando el nombre de usuario actual.

Comprobamos en la GUI que tenemos todos los ficheros que hemos manejado.

Consideraciones finales
Como puedes observar es un sencillo programa y muy práctico para guardar ficheros comprimidos o comprimirlos para enviarlos por correo, por ejemplo, o con SSH a otro equipo, evitando tiempo en la transmisión.
Es posible que tengas que instalar un par de paquetes, que no afectan al funcionamiento del programa, pero si a los «banners». También puedes editar el código y sustituirlos por «echo». Más fácil es instalarlos. Primero actualizas la lista de paquetes de los repositorios y los instalas con
sudo apt update sudo apt install toilet figlet
Ahora solo tienes que copiar y pegar el código en un fichero y darle permisos de ejecución, ejecutando
chmod +x compresor.sh
Y lo ejecutas con
./compresor.sh
Código fuente
Aquí tienes el código de Compress, un programa para hacer paquetes tar
#!/bin/bash # Compresor.sh # Este programa ha sido creado por Francisco Javier Izquierdo Hidalgo. # Es software libre; puedes redistribuirlo y/o modificarlo bajo los # términos de la Licencia Pública General de GNU publicado por la Free # Software Foundation; ya sea la versión 2 de la Licencia, o (a tu # elección) cualquier versión posterior. # Este programa se distribuye con la esperanza de que sea útil, pero SIN # NINGUNA GARANTÍA; sin siquiera la garantía implícita de # COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO EN PARTICULAR. Ver el GNU # General Public License para más detalles. # script para Comprimir/Descomprimir ficheros en formato tgz mediante el # comando tar. Mostrará un menú con las opciones: # - Comprimir # - Descomprimir # - Salir # Dentro de cada opcion, pedirá al usuario los ficheros a comprimir/ # descomprimir, el destino dónde comprimir/descomprimir e información de los # ficheros. # Empaquetar y comprimir: tar -czvf fichero.tar.gz /ruta/del/directorio/ # Desempaquetar y descomprimir: tar -xvf -C fichero.tar.gz #Funcion menu. Muestra el menu de operaciones. menu(){ echo " 1.Comprimir" echo " 2.Descomprimir" echo " Cualquier tecla para salir" return } #Funcion operaciones. Realiza la operacion que indicamos. operaciones(){ case $op in 1) echo ========================================================== echo "Introduce el nombre del nuevo fichero comprimido" read n1 echo =========================================================== echo "¿Donde quieres guardar el fichero/carpeta?" read rutac echo =========================================================== echo "Introduce los ficheros a incluir separados por un espacio" read arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 echo =========================================================== tar -czvf $n1.tar.gz $arg1 $arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8 $arg9 echo =========================================================== echo "Paquete comprimido creado" mv $n1.tar.gz $rutac echo =========================================================== echo "$n1.tar.gz" "se encuentra en la ruta $rutac" echo =========================================================== echo "Y el contenido del paquete es el siguiente:" cd $rutac tar -tf $rutac/$n1.tar.gz echo ;; 2) echo ========================================================== echo "Donde quieres descomprimir el fichero?" read rutad echo ========================================================== echo "El contenido del paquete es:" tar -zxvf $n1.tar.gz -C $rutad echo ========================================================== echo "El contenido del directorio $rutad es;" ls -l $rutad echo ;; *)echo "Introduce una operacion válida (1 o 2)";; esac } # Programa principal clear toilet -f mono12 -F metal COMPRESS figlet " By Javier Izquierdo" echo echo " Vamos a trabajar con ficheros" echo echo " Programa para crear un paquete tar incluyendo los ficheros que indiques" echo " y comprimirlo. Puedes elegir la ubicación de dicho paquete y " echo " desempaquetarlo donde tu quieras" echo " ==========================================================" echo i="y" while [ $i = "y" ] do menu read op operaciones echo "¿ Quieres continuar ? (y/n)" read i done echo " ============================" echo " Has terminado" figlet " $USER" echo " ============================"

Espero que te sea de utilidad, y recuerda que es software libre, tienes libertad para usarlo con cualquier propósito, copiarlo, estudiarlo, distribuirlo, mejorarlo y modificarlo a tu gusto.
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
O si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en pie de la página o desde aquí mismo.