Esta guía forma parte de esta serie de posts dedicados a exprimir a fondo la línea de comandos en Linux. El post de hoy tengo la intención de mostrarte todos los comandos que necesarios para que aprendas a comprimir y empaquetar archivos o directorios, listar el contenido de una carpeta comprimida y extraer los diferentes archivos o carpetas contenidas en ella.
Para ello trabajaremos con los diferentes formatos de compresión (o al menos los más comunes) con los que te puedes encontrar en prácticamente cualquier distribución GNU/Linux de forma nativa, tales como zip, tar, gz, bz2, tar.gz y tar.bz2. Así que, tanto si eres nuevo en Linux, como si ya llevas cierto tiempo, en esta guía te servirá una visión clara de como tratar con los diferentes formatos de compresión desde la línea de comandos.
En este post verás:
GZIP Y BZIP2
En este grupo conocerás los comandos básicos con los que podrás comprimir y descomprimir cualquier archivo en Linux utilizando los formatos .
En este sentido es justo señalar que, en entornos Unix, se separa lo que es el concepto de compresión de lo que es el hecho de empaquetar varios archivos en un único archivador (obviamente puedes utilizar formatos con los que combinar las dos acciones, como verás un poco más adelante).
Para la compresión pura de un archivo, en Linux se utilizan mucho el formato GZIP, todo un clásico en entornos Unix, y el formato BZIP2, algo más moderno y con un mayor índice de compresión.
Antes que nada, ten en cuenta que tenemos que situarnos en la carpeta dónde se encuentran los archivos que queremos comprimir. Si tienes dudas o te falta práctica a la hora de desplazarte por las diferentes carpetas desde la terminal, puedes consultar el post que te acabo de enlazar. Para poner un ejemplo, supongamos que están en la carpeta Documentos dentro de la home.
$ cd Documentos
#GZIP
Gzip es una utilidad de GNU/Linux integrada en el propio sistema operativo y que permite la compresión o descompresión de archivos en formato gz.
Como apunte importante, gzip es una herramienta de compresión pura, es decir, solo comprime archivos individuales (no directorios), y, a diferencia de formatos mas populares como rar o zip, no permite empaquetar varios archivos dentro del mismo.
A continuación tienes los principales comandos que puedes utilizar para comprimir y descomprimir un archivo utilizando gzip.
La sentencia que tienes a continuación es la que te servirá para comprimir cualquier archivo en Gzip, lo que dará como resultado un paquete comprimido con la extensión .gz.
$ gzip -9 archivo
Para gestionar cualquier archivo comprimido en gzip tienes varias opciones. Si quieres conocer los principales parámetros del archivo, véase el ratio de compresión o el nombre del archivo una vez descomprimido, puedes utilizar la siguiente sentencia:
$ gzip -l archivo.gz
Y finalmente, para descomprimir un archivo comprimido en gzip (que podrás reconocer porqué termina con la extensión .gz) , puedes utilizar la siguiente sentencia:
gzip -d fichero.gz
#BZIP2
La utilidad bzip2 también forma parte del sistema en GNU/Linux y es muy similar a gzip, lo único que en este caso sirve para comprimir o descomprimir archivos utilizando el formato bz2.
Al igual que ocurre con gzip, bzip2 solo permite la compresión de archivos individuales, ya que se trata de una herramienta puramente de compresión.
Para comprimir un archivo cualquiera, que en este ejemplo voy a denominar archivo, en bzip2, la sentencia que debes utilizar es la que tienes a continuación.
$ bzip2 -z archivo
Una vez tienes el archivo comprimido en la extensión bz2, que en este caso se llamaarchivo.bz2, puedes hacer un test de la integridad del mismo con el comando que tienes debajo. Si todo está OK, no habrá ningún output.
$ bzip2 -t archivo.bz2
Siguiendo con el ejemplo anterior, para descomprimir el archivo archivo.bz2 puedes utilizar la sentencia de debajo.
$ bzip2 -d archivo.bz2
TAR
Y si en el primer grupo nos hemos centrado en las operaciones de compresión y descompresión puras, ahora pienso que le toca al turno al empaquetado y desempaquetado de archivos, que no compresión.
Para ello, el formato más utilizado en GNU/Linux es TAR, una utilidad que permite empaquetar varios archivos o directorios dentro de un solo paquete en formato con la extensión .tar.
En este caso voy a abordar el uso de Tar como tal, pero lo más común es que se use en combinación con los formatos de compresión Gzip y Bzip2 vistos más arriba (eso me lo reservo para la ultima parte del post).
#TAR -CVF
Siguiendo con el primer ejemplo, podemos suponer que queremos empaquetar dos archivos, que denominaré archivo1 y archivo2, dentro de un paquete .tar que podemos denominarpaquete. Para empaquetar los diferentes archivos uno a uno, puedes utilizar el siguiente comando:
$ tar -cvf paquete.tar archivo1 archivo2
Cuando se trata de empaquetar varios archivos, lo mas práctico es ubicarlos todos dentro de una carpeta y empaquetar directamente la directorio. Para ello puede utilizar el mismo comando anterior pero sustituyendo los diferentes archivos con el nombre del directorio, que en este ejemplo podemos denominar directorio.
$ tar -cvf paquete.tar directorio
#TAR -TVF
Una vez tienes un paquete .tar, una de las cosas que podemos necesitar es conocer el contenido que hay dentro. Para ello debemos utilizar el comando que tienes a continuación, que listara, de forma recursiva (esto es, recorriendo todos los niveles) los diferentes archivos o directorios uno a uno.
$ tar -tvf paquete.tar
#TAR -XVF
Una vez listado el contenido del paquete .tar que hemos creado, lo siguiente es desempaquetar los diferentes archivos o directorios contenidos dentro. Para ello, debes tener en cuenta que si mantienes archivos o directorios con el mismo nombre fuera del paquete (en la misma ubicación) estos serán reemplazados por los nuevos, por lo que conviene que te asegures bien antes.
$ tar -xvf paquete.tar
TAR.GZ Y TAR.BZ2
Llegados este punto, creo que es el momento de tratar con las operaciones que combinan compresión y descompresión de archivos, que al fin y al cabo son las más comunes en otro tipo de entornos como Windows (de hecho, así es como trabajan los formatos de compresión más extendidos, léase Zip y Rar, entre otros).
Si cuando hemos hablado de Gzip y Bzip2 hemos visto que se trata de dos utilidades puramente de compresión, pues bien, lo que no te he contado es que puedes combinar ambas utilidades con Tar, dando lugar a archivos con las extensiones .tar.gz y .tar.bz2, que seguramente te resultaran muy familiares en Linux.
Esto da lugar a la posibilidad de comprimir múltiples archivos dentro de un mismo archivador, al igual que puedes hacer con otros formatos más populares. A continuación te resumo los comandos más importantes que debes conocer en este sentido:
#TAR -CZVF
Para comprimir varios archivos (a modo de ejemplo vamos a llamarlos archivo1 y archivo2) dentro de un paquete comprimido tar.gz, puedes utilizar el siguiente comando. Como verás, es el mismo que utilizamos para empaquetar archivos en tar, con el añadido del parámetro -c, que representa la compresión en Gzip.
tar -czvf paquete.tar.gz archivo1 archivo2
También nos puede interesar comprimir un directorio entero, con todo su contenido dentro. En este caso, la sentencia sería la misma pero sustituyendo los diferentes archivos por el nombre del directorio.
tar -czvf paquete.tar.gz directorio
#TAR -XZVF
Para descomprimir el paquete y desempaquetar su contenido, seguimos con la misma estructura, pero en este caso sustituimos el parámetro -c, de compresión, por el parámetro -x, de descompresión. A continuación tienes la sentencia completa.
tar -xzvf paquete.tar.gz
#TAR -CJVF
Para empaquetar y comprimir una serie de archivos, en este ejemplo utilizaremos los archivos denominados archivo1 y archivo2 en un paquete .tar.bz2 te puedes valer de la siguiente sentencia, que si te fijas, es igual que en el caso de los archivos .tar.gz pero cambiando la -z por la -j.
tar -cjvf paquete.tar.bz2 archivo1 archivo2
#TAR -XJVF
Para descomprimir un paquete .tar.bz2 y desempaquetar su contenido, seguimos con la misma estructura, pero en este caso sustituimos nuevamente el parámetro -c, de compresión, por el parámetro -x, de descompresión. A continuación tienes la sentencia completa.
tar -xjvf paquete.tar.bz2
ZIP
Siguiendo con las operaciones que combinan la compresión y el empaquetado de archivos, en este punto nos centraremos en ZIP, uno de los sistemas de compresión y empaquetado más extendidos. A continuación te resumo los principales comandos que debes conocer para trabajar con este tipo de archivos en GNU/Linux.
#ZIP
Para comprimir y empaquetar un conjunto de archivos o directorios dentro de un archivador en formato ZIP, en cualquier distribución GNU/Linux puedes hacer uso de la utilidad ZIP de forma nativa. Aquí tienes la sentencia que debes utilizar:
$ zip archivador.zip archivo1 archivo2
#UNZIP
En el caso de que tengas un archivo comprimido en ZIP, la utilidad que debes utilizar para gestionarlo es unzip. Con ella podrás realizar acciones como listar todos los archivos de dentro, o descomprimir el paquete y desempaquetar los diferentes archivos. A continuación tienes algunos ejemplos de como puedes utilizarlo.
Con este comando podrás listar todos los archivos o directorios contenidos del paquetearchivador.zip. Es útil para conocer el contenido antes de desempaquetarlo.
$ unzip -l archivador.zip
Con este otro comando podrás descomprimir el paquete archivador.zip y desempaquetar todos sus archivos y directorios contenidos uno a uno en la misma carpeta de destino en la que se encuentra el archivador.
$ unzip archivador.zip
En caso de que solo quieras desempaquetar uno de los archivos contenidos, puedes utilizar el mismo comando, pero indicando a continuación el nombre del archivo contenido, en este caso vamos a suponer que es el archivo de texto archivo1 de los ejemplos anteriores.
$ unzip archivador.zip archivo1
7Z
Y, si bien hasta ahora me he centrado en los formatos con los que puedes trabajar de forma nativa desde practicamente cualquier distribución GNU/Linux, lo cierto es que creo justo hacer una excepción en este caso, y es que el formato 7z y el software de compresión 7-Zip (el cual necesitaras para poder trabajar con este formato) lo valen con creces.
7-Zip es un software de compresión totalmente libre, abierto y multiplataforma que ofrece compatibilidad para diferentes formatos de compresión, si bien dispone del suyo propio. 7z es un formato de compresion sin perdida y que destaca especialmente por su elevado ratio de compresión, superior a otros formatos más populares como ZIP, GZIP o RAR.
En este caso, aprovechando que ya he publicado un post acerca de como instalar y poder utilizar 7-Zip en Linux, creo que lo mejor será remitirte a dicho post, en el que podrás ver, por un lado, los paquetes que tienes que instalar para poder trabajar con el, y en segundo lugar, como utilizarlo tanto desde la terminal, como de forma grafica desde el propio navegador de archivos.