15 ejemplos de comandos tar para administradores de sistemas y desarrolladores

tar es uno de los formatos populares de archivo de archivos disponibles en los sistemas basados ​​en Unix y Linux.

El nombre en sí se deriva de Tape ARchive, ya que fue desarrollado para escribir datos secuenciales en dispositivos de cinta. También se le conoce como tarball a veces.

Por defecto, tar solo archiva los archivos sin comprimir pero usando algunas porciones. Podemos usar diferentes técnicas de compresión para obtener una salida comprimida. La utilidad tar generalmente se incluye en la mayoría de las distribuciones de Linux de forma predeterminada, y el formato en sí es compatible con otros sistemas operativos, incluidos Windows y macOS, a través de diferentes herramientas y utilidades.

Cubriremos algunos de los ejemplos comunes y el uso del comando tar y sus banderas compatibles en este artículo.

Entonces empecemos…

Crear archivo tar

Para crear un archivo simple sin comprimir, la sintaxis del comando tar es:

$ tar cvf <tar-file-name> <files-to-archive>

Aquí las banderas c representan la creación, v para la salida detallada y f para especificar el nombre del archivo tar. Por convención, especifique el nombre del archivo tar con la extensión .tar. Los archivos que se archivarán se pueden especificar con comodines o como rutas/nombres de archivo únicos o múltiples.

Como ejemplo, tengo tres archivos en mi directorio:

$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
$

Y quiero crear un archivo tar que contenga los tres archivos, se puede hacer como:

$ tar cvf archive.tar *
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
$

Puedo especificar solo archivos específicos para archivar también, como:

$ tar cvf archive1.tar file1.txt file2.txt
file1.txt
file2.txt
$ ls -l archive1.tar
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar
$

Crear archivo comprimido (GZ)

tar no solo permite archivar archivos, sino también comprimirlos para ahorrar espacio. Uno de los formatos de compresión populares es gunzip, generalmente representado por la extensión .gz después de .tar o como tgz. Podemos usar el indicador z para especificar que necesitamos que los archivos se compriman con gunzip. Aquí hay un ejemplo:

$ tar cvzf archive.tar.gz file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$

Puede observar que el tamaño de ambos archivos de almacenamiento es sustancialmente diferente a pesar de que ambos contienen los mismos tres archivos. Esto se debe al uso de la compresión mediante el indicador z.

Crear archivo comprimido (BZ2)

tar admite varios otros formatos de compresión. Uno de ellos es bz2 o bzip2, que se representa con la extensión tar.bz2 o, a veces, como tbz2. Puede proporcionarle un tamaño de archivo más pequeño, pero a su vez consume más CPU, por lo que el proceso de compresión/descompresión podría ser más lento que el archivo gz.

Ejemplo:

$ tar cvjf archive.tar.bz2 file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   212 Sep 12 20:25 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$ file archive.tar*
archive.tar:     POSIX tar archive (GNU)
archive.tar.bz2: bzip2 compressed data, block size = 900k
archive.tar.gz:  gzip compressed data, from Unix, original size modulo 2^32 10240
$

Descomprimir todos los archivos

Un archivo tar (ya sea comprimido o sin comprimir) se puede extraer simplemente usando la opción x. Los siguientes ejemplos aclararán su uso:

$ tar xvf archive.tar
file1.txt
file2.txt
file3.txt
$ ls -l
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair    13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair    19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair    24 Sep 12 20:08 file3.txt
$

Esto funciona para un archivo comprimido gz como:

$ tar xvf archive.tar.gz
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

O incluso para un archivo comprimido bz2 como:

$ tar xvf archive.tar.bz2
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Lista de contenidos de alquitrán

Para enumerar el contenido de un archivo tar, puede usar el indicador t como se muestra a continuación:

$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$

Descomprimir archivos específicos

Solo se puede extraer un archivo de un archivo tar o tar.gz o tar.bz2 especificando el nombre del archivo como:

$ tar xvf archive.tar.bz2 file1.txt
file1.txt
$ ls -l
total 8
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
$

Del mismo modo, puede especificar varios nombres de archivo separados por espacios para extraerlos juntos de una sola vez.

$ tar xvf archive.tar.bz2 file1.txt file3.txt
file1.txt
file3.txt
$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Descomprimir usando comodín

Para extraer uno o más archivos usando un PATRÓN de comodines, use la marca –wildcards:

$ tar xvf archive.tar.bz2 --wildcards "file*"
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Agregar archivos al archivo

Se pueden agregar/agregar nuevos archivos a tarballs sin comprimir existentes usando el indicador r o –append con nuevos nombres de archivo o patrón de comodines (recuerde que esto solo funciona con archivos .tar sin comprimir y no con formatos comprimidos tar.gz o tar.bz2):

$ tar rvf archive.tar file-new*
file-new.txt
file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new2.txt
$

Puede observar que la lista de contenidos de archive.tar nuevamente muestra los dos archivos recién agregados.

Eliminar archivos del archivo

Es posible eliminar archivos específicos de un archivo tar usando el indicador –delete como se muestra a continuación (compare la lista tar antes y después de la eliminación de archivos):

$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new.txt
-rw-r--r-- abhisheknair/abhisheknair  9 2021-09-19 19:10 file-new2.txt
$ tar --delete -f archive.tar file-new.txt file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
$

Nuevamente, esto solo funciona para archivos comprimidos sin comprimir y fallará para formatos de archivo comprimidos.

Crear con Verificar

Al crear archivos tar sin comprimir, puede verificar el contenido del archivo utilizando el indicador W como:

$ tar cvfW archive.tar file*.txt
file1.txt
file2.txt
file3.txt
Verify file1.txt
Verify file2.txt
Verify file3.txt
$

Esto no se puede usar con banderas de compresión, aunque puede comprimir el archivo tar creado más tarde usando gzip u otras herramientas.

Extraer tar a la carpeta

Si desea extraer el contenido de su tarball a una carpeta específica en lugar del directorio actual, use el indicador -C con la ruta del directorio como se muestra a continuación:

$ tar xvf archive.tar -C new-directory/
file1.txt
file2.txt
file3.txt
file2.txt
file4.txt
$ ls -l new-directory/
total 16
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt
$

Usar indicador de diferencias

Puede usar el indicador –diff o d para encontrar cualquier cambio entre los archivos en el archivo tar y los del sistema de archivos. Aquí hay un ejemplo que ejecuta el diff una vez cuando el archivo dentro y fuera del tar era el mismo. Después de actualizar el archivo, se ejecutó una vez más para mostrar la diferencia en la salida.

$ tar dvf archive.tar file4.txt
file4.txt
$
$ echo newline > file4.txt
$
$ tar dvf archive.tar file4.txt
file4.txt
file4.txt: Mod time differs
file4.txt: Size differs
$

Excluir archivos

La exclusión de archivos específicos puede ser un requisito al crear archivos tar. Esto se puede lograr con el indicador –exclude.

$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/
dir/
dir/file1.txt
dir/file3.txt
$ ls -l dir
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt
$ tar tvf archive.tar.gz
drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/
-rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt
-rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt
$

Como puede observar en el resultado anterior, podemos especificar el indicador –exclude varias veces para especificar varios nombres de archivo o patrones en condición AND. Tenga en cuenta que de los seis archivos en el directorio del ejemplo anterior, solo dos archivos cumplieron la condición para ser incluidos en archive.at.gz.

Ver tamaño del contenido de alquitrán

Podemos obtener el tamaño del contenido de un archivo tar comprimido usando el siguiente comando:

$ tar tvf archive.tar.gz
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$ tar -xzf archive.tar.gz --to-stdout|wc -c
56
$

Del mismo modo para el archivo bz2:

$ tar tvf archive.tar.bz2
-rw-r--r-- abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt
-rw-r--r-- abhisheknair/abhisheknair 19 2021-09-12 20:08 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt
$ tar -xjf archive.tar.bz2 --to-stdout|wc -c
56
$

Conservar permisos

De forma predeterminada, el comando tar conserva el permiso de los archivos y directorios que está archivando, aunque puede especificar explícitamente lo mismo usando el indicador -p o –preserve-permissions como se muestra a continuación:

$ tar cvpzf archive.tar.gz *.txt
file1.txt
file2.txt
file3.txt
$

Resumen 👨‍💻

tar es una utilidad útil en los sistemas Unix/Linux durante mucho tiempo y se utilizó principalmente en tareas de archivado y copia de seguridad. La utilidad ha evolucionado con muchas opciones a lo largo del tiempo. Se puede usar para tareas simples o complejas, dado que conoce las características que ofrece. Este artículo cubre algunas de las operaciones básicas que puede realizar con el comando tar y muestra cómo puede ayudarlo en sus tareas diarias de administración del sistema.

Consulte su página de manual man tar o use el comando tar –help o tar –usage para obtener más detalles.