Veamos en este artículo cómo comprimir, crear y extraer archivos tar.
Cada vez que tengo que extraer archivos .tar.gz desde la línea de comandos, nunca recuerdo exactamente cómo hacerlo. En este tutorial aprenderemos cómo hacer de una vez por todas y además muchos otros “hacks” sobre los ficheros .tar.
Este artículo es una adaptación del artículo escrito en inglés por Seth Kenlon aparecido en la web opensource.com que puedes ver en este enlace:
Mediante los gestores de archivos gráficos actuales de GNU/Linux (Dolphin, Thunar, etc) el comprimir y descomprimir archivos es muy sencillo, basta con un simple clic del botón derecho del ratón encima del archivo para que se nos presente el menú y la opción correspondiente.
Pero en este tutorial veremos cómo hacerlo mediante la línea de comandos, desde donde tendremos más opciones y en el caso de que no haya un entorno gráfico no nos encontremos perdidos y seamos capaces de realizar la tarea.
Muchos usuarios creen que los archivos tar están comprimidos igual que los de extensión .zip, pero cabe destacar aquí que un archivo tar no tiene una comprensión notable. El formato tar sólo crea un contenedor para archivos, pero los archivos pueden comprimirse por separado con otras utilidades.
La compresión más común que se utiliza a los archivos .tar suele ser Gzip, bzip2 o xz. Por eso lo más normal es encontrar archivos con extensión .tar.gz o tgz.
Comencemos pues.
Crear un archivo tar (aka tarball)
En el argot, un tarball es un archivo comprimido con tar. Para crear un contenedor tar con un conjunto de archivos, hay que colocarlos dentro de la carpeta que queremos y después ejecutar tar junto con el nombre del archivo que queremos crear y la carpeta que queremos archivar:
tar --create --verbose --file archivo.tar mi_carpeta
La utilidad tar es un caso único entre los comandos, ya que no es necesario poner guiones delante de las opciones cortas, lo que permite abreviar considerablemente el comando anterior en uno similar escribiendo simplemente:
tar cvf archivo.tar mi_carpeta
También cabe destacar que no es necesario poner los archivos dentro de una carpeta antes de crear el archivo tar, pero es algo que está bien visto. Si no lo hacemos así al descomprimir el archivo tendremos un montón de archivos sueltos en la ruta donde lo hayamos descomprimido.
A esto se le conoce como un “tarbomb“, aunque no siempre es malo. En ocasiones esto resulta útil a la hora de instalar parches de software por ejemplo.
Comprimiendo archivos
Como ya hemos dicho con un archivo .tar no se comprimen los archivos, simplemente se agrupan. Para comprimir deberemos utilizar Gzip o bzip, para ello ejecutaremos algo como esto:
tar --create --bzip2 --file foo.tar.bz2 mi_carpeta
tar --create --gzip --file foo.tar.gz mi_carpeta
Las extensiones más comunes son tar.gz o .tgz para los tar comprimidos con Gzip, y .tbz o .tar.bz2 para los archivos comprimidos con bzip.
Extrayendo los archivos
Para descomprimir un archivo que hayamos descargado o nos hayan enviado es comando es muy sencillo, basta con ejecutar:
tar --extract --file archivo.tar.gz
Y con los comandos reducidos sería:
tar xf archivo.tar.gz
Incluso se puede utilizar para descomprimir archivos .zip
tar --extract --file archivo.zip
Uso más avanzado
Una vez que ya conocemos el uso básico de tar, podemos hackear un poco más y conocer algunas de las opciones avanzadas que esconde.
Añadir un archivo a un fichero tar ya existente
Para ello, no es necesario desempaquetar el archivo tar, añadir el archivo que queremos y volver a empaquetar con tar. Podemos añadir un archivo o una carpeta mientras el archivo tar no este comprimido. Si el archivo ya está comprimido, entonces sí necesitaremos descomprimirlo, pero no desempaquetarlo de tar.
Supongamos que tenemos un archivo comprimido con Gzip:
gunzip archivo.tar.gz
ls
archivo.tar
Ahora que lo tenemos descomprimido vamos a añadirle un archivo y una carpeta al archivo .tar
tar --append --file archivo.tar foo.txt
tar --append --file archivo.tar bar/
Que en versión con las opciones reducidas sería algo como:
tar rf archivo.tar foo.txt
tar rf archivo.tar bar/
Ver la lista de archivos de un archivo tar
Para ver los archivos que están dentro de un archivo tar, ya este éste comprimido o sin comprimir, utilizaremos la opción –list
tar --list --file archivo.tar.gz
mi_carpeta/
mi_carpeta/uno
mi_carpeta/dos
mi_carpeta/tres
bar/
bar/cuatro
foo.txt
También podremos utilizar la versión reducida de este comando:
tar tf archive.tar.gz
Extraer un archivo o una carpeta
En ocasiones puede que no necesites todos los archivos de un “tarball”, y sólo quieras extraer uno o dos. Después de listar el contenido con el comando anterior, utilizaremos el comando que ya conocemos para extraer, junto con la ruta del archivo que queremos extraer:
tar xvf archive.tar.gz bar/cuatro
bar/cuatro
Con esto el archivo “cuatro” es extraido a una nueva carpeta llamada “bar”. Si la carpeta ya existe en la ruta, entonces el archivo “cuatro”es ubicado dentro de la carpeta.
Para extraer varios archivos o carpetas, básicamente es lo mismo, pero indicando los distintos archivos o carpetas que queramos:
tar xvf archivo.tar.gz mi_carpeta/uno bar/cuatro
mi_carpeta/uno
bar/cuatro
También admite utilizar el uso de comodines a la hora de especificar archivos o carpetas:
tar xvf archivo.tar.gz --wildcards '*.txt
foo.txt
Extraer un archivo tar en otra carpeta
Antes hemos visto que los “tarball” se convierten en “tarbombs” cuando los archivos se “desparraman” por todo el equipo si no están comprimidos dentro de una carpeta. Si al listar un archivo tar, ves que sus archivos no están contenidos en una carpeta, se puede crear una carpeta de destino donde ubicarlos:
tar --list --file archivo.tar.gz
foo
bar
baz
mkdir nuevos_archivos
tar xvf archivo.tar.gz -C nuevos_archivos
Esto hace que todos los archivos del archivo .tar.gz queden dentro de la carpeta nuevos_archivos.
Te animo a que pruebes tu misma a “hackear”, leer la página man y hacer tus pruebas con tar. A ver si la próxima vez que tenga que descomprimir un “tarball” no tengo que buscar por la red cómo se hace.
Yo propongo que para comprimir el comando sea “tar” y para descomprimir sea “untar” ? No dejes de visitar también en el artículo en inglés original de donde he sacado la información.
—————- y GNU —————-