Linux, ¿cómo extraer archivos de un archivo.tar.gz o.tar.bz2?

Los archivos Tar son archivos comprimidos. Los encontrará frecuentemente mientras usa una distribución Linux como Ubuntu o incluso mientras usa el terminal en macOS. A continuación se explica cómo extraer o destartartar el contenido de un archivo tar, también conocido como tarball.

¿Qué significan .tar.gz y.tar.bz2?

Los archivos que tienen una extensión.tar.gz o.tar.bz2 son archivos comprimidos. Un archivo con sólo una extensión.tar no está comprimido, pero será muy raro.

La parte.tar de la extensión de archivo representa el archivo de cintas, y es la razón por la que ambos tipos de archivo se denominan archivos tar. Los archivos Tar datan de 1979, cuando se creó el comando tar para permitir a los administradores del sistema archivar los archivos en cinta. Cuarenta años más tarde seguimos usando el comando tar para extraer archivos tar en nuestros discos duros. Alguien en algún lugar probablemente todavía esté usando alquitrán con cinta adhesiva.

El sufijo de la extensión.gz o.bz2 indica que el archivo ha sido comprimido, utilizando el algoritmo de compresión gzip o bzip2. El comando tar funcionará bien con ambos tipos de archivos, por lo que no importa qué método de compresión se haya utilizado, y debería estar disponible en todas partes donde haya un intérprete de comandos Bash. Sólo tiene que utilizar las opciones de línea de comandos tar apropiadas.

Extracción de archivos de archivos de alquitrán

Digamos que ha descargado dos archivos de partituras. Un archivo se llama ukulele_songs.tar.gz , el otro se llama guitar_songs.tar.bz2. Estos archivos se encuentran en el directorio de descargas.

Linux

Extraigamos las canciones de ukelele:

tar -xvzf ukulele_songs.tar.gz

A medida que se extraen los archivos, se listan en la ventana del terminal.

Linux

Las opciones de línea de comandos que usamos son:

-x: Extraer, recuperar los archivos del archivo tar.
-v: Verbose, lista los archivos a medida que se van extrayendo.
-z: Gzip, usa gzip para descomprimir el archivo tar.
-f: Archivo, el nombre del archivo tar con el que queremos trabajar. Esta opción debe ir seguida del nombre del archivo tar.

Enumere los archivos en el directorio con ls y verá que se ha creado un directorio llamado Ukulele Songs en Linux. Los archivos extraídos están en ese directorio. ¿De dónde viene este directorio? Estaba contenido en el archivo tar, y fue extraído junto con los archivos.

Linux

Ahora vamos a extraer las canciones de la guitarra. Para hacer esto usaremos casi exactamente el mismo comando que antes pero con una diferencia importante. El sufijo de la extensión.bz2 nos dice que ha sido comprimido usando el comando bzip2. En lugar de usar la opción-z (gzip), usaremos la opción -j (bzip2).

tar -xvjf guitarra_canciones.tar.bz2

Linux

Una vez más, los archivos se listan en el terminal a medida que se extraen. Para ser claros, las opciones de línea de comandos que usamos con tar para el archivo.tar.bz2 eran:

-x: Extraer, recuperar los archivos del archivo tar.
-v: Verbose, lista los archivos a medida que se van extrayendo.
-j: Bzip2, usa bzip2 para descomprimir el archivo tar.
-f: Archivo, nombre del archivo tar con el que queremos trabajar.

Si enumeramos los archivos en el directorio Download veremos que se ha creado otro directorio llamado Guitar Songs.

Linux

Elección de dónde extraer los archivos a en Linux

Si queremos extraer los archivos a una ubicación distinta al directorio actual, podemos especificar un directorio de destino utilizando la opción -C (directorio especificado).

tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/

Mirando en nuestro directorio de Documentos/Canciones veremos que el directorio de Guitar Songs ha sido creado.

Tenga en cuenta que el directorio de destino ya debe existir, tar no lo creará si no está presente. Si necesita crear un directorio y hacer que tar extraiga los archivos en un solo comando, puede hacerlo de la siguiente manera:

mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/

La opción -p (padres) hace que mkdir cree cualquier directorio padre que sea necesario, asegurando que se cree el directorio de destino.

Mirando dentro de los archivos de alquitrán antes de extraerlos

Hasta ahora hemos dado un salto de fe y extraído los archivos sin ser vistos. Puede que quieras mirar antes de saltar. Puede revisar el contenido de un archivo tar antes de extraerlo utilizando la opción -t (lista). Por lo general, es conveniente canalizar la salida a través del comando menos.

tar -tf ukulele_songs.tar.gz | menos

Note que no necesitamos usar la opción -z para listar los archivos. Sólo necesitamos añadir la opción -z cuando estamos extrayendo archivos de un archivo.tar.gz. Del mismo modo, no necesitamos la opción -j para listar los archivos en un archivo tar.bz2.

Al desplazarse por la salida podemos ver que todo lo que hay en el archivo tar se encuentra dentro de un directorio llamado Ukulele Songs, y dentro de ese directorio, hay archivos y otros directorios.

Podemos ver que el directorio de Ukulele Songs contiene directorios llamados Random Songs, Ramones y Possibles.

Para extraer todos los archivos de un directorio dentro de un archivo tar utilice el siguiente comando. Tenga en cuenta que la ruta está entre comillas porque hay espacios en la ruta.

tar -xvzf ukulele_songs.tar.gz «Ukulele Songs/Ramones/»

Para extraer un solo archivo, indique la ruta y el nombre del archivo.

tar -xvzf ukulele_songs.tar.gz «Ukulele Songs/023 – My Babe.odt»

Puede extraer una selección de archivos utilizando comodines, donde * representa cualquier cadena de caracteres y ? representa cualquier carácter individual. El uso de comodines requiere el uso de la opción –wildcards.

tar -xvz –wildcards -f ukulele_songs.tar.gz «Ukulele Songs/Possibles/B*»

Extracción de archivos sin extraer directorios en Linux

Si no desea que la estructura de directorios del archivo tar se vuelva a crear en su disco duro, utilice la opción –strip-components. La opción –strip-components requiere un parámetro numérico en Linux. El número representa cuántos niveles de directorios hay que ignorar. Los archivos de los directorios ignorados se siguen extrayendo, pero la estructura de directorios no se replica en el disco duro.

Si especificamos –strip-components=1 con nuestro archivo tar de ejemplo, el directorio Ukulele Songs top-most dentro del archivo tar no se crea en el disco duro. Los archivos y directorios que se habrían extraído a ese directorio se extraen en el directorio de destino.

tar -xvzf ukulele_songs.tar.gz –strip-components=1

Sólo hay dos niveles de anidamiento de directorios dentro de nuestro archivo tar de ejemplo. Así que si usamos –strip-components=2, todos los archivos se extraen en el directorio de destino, y no se crean otros directorios.

tar -xvzf ukulele_songs.tar.gz –strip-components=2

Si miras la página de manual de Linux verás que tar tiene que ser un buen candidato para el título de «command having the most command line options». Afortunadamente, para poder extraer archivos.tar.gz y tar.bz2 con un buen grado de control granular, sólo necesitamos recordar un puñado de estas opciones.


¿Tienes alguna pregunta o problema relacionado con el tema del artículo? Queremos ayudarte.

Deja un comentario con tu problema o pregunta. Leemos y respondemos todos los comentarios, aunque a veces podamos tardar un poco debido al volumen que recibimos. Además, si tu consulta inspira la escritura de un artículo, te notificaremos por email cuando lo publiquemos.
*Moderamos los comentarios para evitar spam.

¡Gracias por enriquecer nuestra comunidad con tu participación!

Deja un comentario