El comando tar en Linux se usa para crear un “paquete” de archivos (tarball), es decir, mete los archivos en uno solo pero no comprime por default el contenido del archivo de salida, como lo haría zip
o rar
. Sin embargo, con un parámetro podemos comprimirlo. Lo explico porque en algún momento veremos los nombres de archivo como .tar
y algunas otras veces .tar.gz
o tbz
.
La sintaxis general es:
tar <opciones> <archivos/directorios>
Nota: podemos usar siempre el parámetro "-v"
, que significa que nos diga qué está haciendo el comando
Crear un archivo con el comando tar en Linux
# Opción 1
tar -vcf nombre_archivo.tar archivo1.jpg directorio/subdirectorio
#Opción 2
tar -vcf nombre_archivo.tar /etc/ /var/log/syslog
Estamos usando los parámetros:
-c
: le indicamos que vamos a crear un archivo.-f
: usamos este para indicarle que vamos a hacer algo con un archivo
NOTA: estos archivos son guardados como rutas relativas, es decir, en cualquier directorio en el que estés, al descompactar se van a guardar ahí. Hay otro parámetro que usaremos para que al compactar lo haga en rutas absolutas.
Ver contenido de un archivo con el comando tar en Linux
Una vez que hemos creado, podemos ver su contenido:
tar -vtf archivo.tar
-t
: le indicamos que vamos a listar solamente los archivos contenidos.
Aquí la salida nos mostrará los permisos y el usuario/grupo propietario. Si removemos la opción "v"
, solo nos mostrará la lista de archivos sin más información.
Agregar más archivos al tar
Se pueden agregar más archivos a uno ya creado:
tar -vrf archivo.tar nuevo-archivo.txt
# Verificar si se ha agregado el archivo
tar -tf archivo.tar
-r
: es el que indica que vamos a agregar un archivo/directorio a un archivo tar ya creado.
Extraer los archivos con el comando tar en Linux
Para extraer los archivos se hace de la siguiente manera:
tar -vxf archivo.tar
-x
: es el parámetro para indicarle a tar que hay que extraer los archivos.
Como mencioné anteriormente, esto va a sacar los archivos en el directorio en el que estás trabajando.
Extraer un solo archivo
Si lo que quieres es extraer un solo archivo, haz lo siguiente:
tar -vxf archivo.tar archivo.jpg
Extraer los archivos de un tar en un directorio diferente
Si quieres extraer los archivos en una directorio diferente puedes hacer lo siguiente:
tar -vxf archivo.tar -C /mi/directorio/destino
Comprimir un archivo con el comando tar en Linux
Mencioné que el comando tar
por sí mismo, solo junta archivos en uno solo, pero no comprime como lo haría 7z
, zip
o rar
. Pero sí tiene un parámetro para que una vez compactados, podamos comprimirlos.
Para comprimir (usaremos gzip
y bzip2
) un archivo hacemos lo siguiente:
# Creamos y comprimimos con gzip mi/directorio y un archivo.jpg
tar -vczf archivo.tar.gz /mi/directorio archivo.jpg
# Creamos y comprimimos con bzip2 mi/directorio y un archivo.jpg
tar -vcjf archivo.tar.bz2 /mi/directorio archivo.jpg
-z
: comprimimos los archivos con formato gzip. También podemos usar la extensión .tgz para indicar este tipo de archivos.-j
: comprimimos los archivos con formato bzip2. También podemos usar la extensión .tbz para indicar este tipo de archivos.
Extraer archivos de un tar comprimido
Es posible, aunque poco probable, que al extraer los archivos de un tar comprimido aparezca un error mencionando el formato de compresión. Para ello, al extraer, podemos indicar el formato para extraer.
# Extraer sin indicarle el formato de compresión
tar -vxf archivo.tbz
# Extraer indicando el formato de compresión
tar -vxjf archivo.tbz
Excluir archivos en un tar
Al crear un archivo tar, podemos excluir archivos y directorios. Aquí podemos usar patterns para identificarlos y pasarlos al comando mediante el parámetro –exclude.
# Excluir archivos con extensión txt
tar -vczf archivo.tgz /directorio1/ /mi/directorio2/ --exclude=*.txt
# Excluir varios archivos y directorios
tar --exclude="directorio1" --exclude=*.txt -vczf archivo.tgz .
Rutas absolutas
Al principio mencionaba que los archivos al extraerlos se guardan en el directorio, con rutas relativas, por ejemplo. Si agrego un directorio, por ejemplo, “books/sci-fi/ender.pdf”, al extraerlos creará la estructura en el directorio donde se esté trabajando. Esto es porque elimina la primera “/” al momento de crear el archivo tar.
Imagina que ahora tienes un archivo tar que contiene algunos archivos de configuración que tienen que ser reemplazados en varios directorios específicos, por ejemplo, Apache, tus archivos de configuración en tu aplicación y otros servicios.
En este escenario, tendrías que ir directorio por directorio, extrayendo cada uno de ellos en su directorio correspondiente. Pero si al crear el archivo tar agregamos el parámetro “-P” esas rutas absolutas se toman al momento de extraer archivos, enviando y reemplazando los archivos extraídos.
Ejemplo:
tar -vcjPf archivo.tar /var/www/ /etc/apache2/ /var/log/httpd-error.log
Al extraer los archivos de este tar, buscarán y reemplazarán los archivos en las rutas absolutas de esos archivos.
Con esto terminamos este comando usando los parámetros más usados.
Gracias por leer.