Apretujando ficheros y carpetas

Muchas veces nos encontramos en la situación de estar haciendo cosas en la terminal de comandos y necesitar, en un momento dado, descomprimir (o desempaquetar) un archivo comprimido de cualquier formato (tar, gz, bz2, …). O al contrario, necesitamos empaquetar (o comprimir) varios ficheros y/o carpetas en uno o varios archivos, pero no nos apetece abandonar el terminal para recurrir a la herramienta gráfica de turno

En tales casos no es fácil acordarse de todos los comandos disponibles en Linux, y mucho menos de sus correspondientes opciones. Y además, da un poco de pereza ponerse a leer las páginas de manual de cada comando, con su interminable lista de argumentos, opciones y parámetros varios.

En momentos como esos se agradece tener a mano una tabla como la siguiente, con la sintaxis de los comandos clásicos en Linux para el empaquetado y compresión de ficheros.

comprimir descomprimir listar
.tar tar cvf archivo.tar ficheros tar xvf archivo.tar tar tvf archivo.tar
.tar.gz, .tar.z,.tgz tar czvf archivo.tar.gz ficheros tar xzvf archivo.tar.gz tar tzvf archivo.tar.gz
.tar.bz2 tar -c ficheros | bzip2 > archivo.tar.bz2 tar jvxf archivo.tar.bz2 bzip2 -dc arch.tar.bz2 | tar -tv
.gz (gzip) gzip -q ficheros gzip -d ficheros.gz
.bz2 (bzip2) bzip2 ficheros bzip2 -d ficheros.bz2

Hay que distinguir dos tipos de comandos:

  • aquellos que comprimen ficheros y los empaquetan (imitando la estructura de directorios) en un solo archivo. En este caso hay que asignarle un nombre al archivo y especificar los ficheros que se van a seleccionar. Ejemplos de comandos de este tipo se pueden ver en las tres primeras filas de la tabla.
  • y los que se limitan a comprimir ficheros sueltos sin más, borrando los originales y dejando los comprimidos con una extensión distinta. En este caso basta con especificar los ficheros que van a comprimirse. Véase las dos últimas filas de la tabla.

Pongamos un ejemplo de cada caso.

$ tar -cv Imagenes/*.jpg | bzip2 > imagenes.tar.bz2
Imagenes/532092_920.jpg
Imagenes/532124_920.jpg
Imagenes/532128_920.jpg
$ bzip2 -dc imagenes.tar.bz2 | tar -tv
-rw------- aag/aag      133809 2015-05-19 19:08 Imagenes/532092_920.jpg
-rw------- aag/aag       53704 2015-05-19 19:08 Imagenes/532124_920.jpg
-rw------- aag/aag       85939 2015-05-19 19:08 Imagenes/532128_920.jpg
$ tar jvxf imagenes.tar.bz2
Imagenes/532092_920.jpg
Imagenes/532124_920.jpg
Imagenes/532128_920.jpg

En este caso he comprimido los ficheros JPEG situados dentro del directorio Imagenes con una combinación de los comandos tar y bzip2, y los he empaquetado en el archivo imagenes.tar.bz2. Para verificarlo, he listado los ficheros contenidos en dicho archivo, lo cual permite visualizarlos sin necesidad de descomprimirlos. Y, finalmente, he descomprimido el archivo para volver a tener las imágenes JPEG en el mismo directorio donde estaban.

$ gzip -qv Imagenes/*.jpg
Imagenes/532092_920.jpg:	  0.1% -- replaced with Imagenes/532092_920.jpg.gz
Imagenes/532124_920.jpg:	  0.3% -- replaced with Imagenes/532124_920.jpg.gz
Imagenes/532128_920.jpg:	  0.2% -- replaced with Imagenes/532128_920.jpg.gz
$ gzip -dv Imagenes/*.gz
Imagenes/532092_920.jpg.gz:	  0.1% -- replaced with Imagenes/532092_920.jpg
Imagenes/532124_920.jpg.gz:	  0.3% -- replaced with Imagenes/532124_920.jpg
Imagenes/532128_920.jpg.gz:	  0.2% -- replaced with Imagenes/532128_920.jpg
$ ls -l Imagenes
-rw------- 1 aag aag 131K may 19  2015 532092_920.jpg.gz
-rw------- 1 aag aag  53K may 19  2015 532124_920.jpg.gz
-rw------- 1 aag aag  84K may 19  2015 532128_920.jpg.gz

Ahora he comprimido con gzip cada uno de los ficheros JPEG, los cuales son sustituidos por sus correspondientes ficheros comprimidos, a cuyos nombres se les añade el sufijo .gz. Para recuperar las imágenes originales ejecutaremos gzip con la opción -d. En este caso no hay nada que listar porque no se ha creado ningún archivo de empaquetado, en cualquier caso se pueden listar los ficheros comprimidos con el comando ls.

Cuando desempaquetemos un archivo con el comando tar, puede usarse la opción -C para extraer su contenido en un directorio distinto al directorio donde se encuentra.

$ tar jvxf imagenes.tar.bz2 -C Escritorio
Imagenes/532092_920.jpg
Imagenes/532124_920.jpg
Imagenes/532128_920.jpg
$ ls -l Escritorio
drwxr-xr-x 2 aag aag 4,0K feb  8 18:20 Imagenes/
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s