tar, es una de esas herramientas que vengo utilizando durante años, y que para mi sorpresa, todavía no le había dedicado un artículo. Pero no solo esto, sino que no la conocía con suficiente profundidad. Vamos, que siempre le he dado el mismo uso, mayoritariamente descomprimir, y por supuesto, aunque menos comprimir. Sin embargo, esta es una herramienta ampliamente utilizada, y creo que vale la pena dedicarle un artículo a conocerla con mas profundidad, y sacarle algo mas de partido que simplemente comprimir y descomprimir.
Así, en este artículo quiero ir un poco mas allá, no solo contarte como puedes comprimir y descomprimir, sino también, utilizar tar, para ver el contenido, extraer un archivo concreto o incluso, borrar un archivo del paquete.
tar
tar es una herramienta de empaquetado. ¿A que me refiero? Simplemente se trata de meter o guardar todos los archivos o directorios que necesites en un mismo archivo. Una forma sencilla de transportar archivos de un sitio a otro, ya sea en tu propia máquina o entre diferentes máquinas.
Además tar, no solo te permite empaquetar esos archivos y directorios, sino que además te da la posibilidad de comprimirlos para de esta manera que ocupen menos espacio, y sean menos pesados y por tanto más fáciles de transportar.
Lo básico empaquetar y desempaquetar
Voy a empezar por lo más básico, que es empaquetar y desempaquetar. Lo distingo de comprimir y descomprimir, porque esto te lo muestro a continuación, ya que como he indicado en el punto anterior, se trata de dos conceptos distintos.
Para que sea mas sencillo, voy a crear un conjunto de archivos con los que jugaré a continuación. Para ello, y si quieres hacer tu también los ejemplos, ejecuta la siguiente instrucción,
touch file{1..20}.md
Empaquetando archivos
Como ves, se han creado 20 archivos que vamos a empaquetar a continuación. Para ello, ejecuta la siguiente instrucción,
tar -cvf empaquetado.tar *.md
Ahora tienes todos tus archivos en un mismo paquete. ¿Que son esas opciones que he puesto?
-c
es para crear un archivo-v
te indica de forma explícita las operaciones que realiz-f
para indicar el archivo que se va a crear en este caso.
Indicarte que esto también se puede poner por separado, como
tar -c -v -f empaquetado.tar *.md
Tienes que tener en cuenta que -f
tiene que preceder al nombre del archivo que vas a crear, ya sea que lo utilices por separado o junto con otras opciones. Quiero decir, que -cvf empaquetado.tar
funcionará, pero en cambio -fcv empaquetado.tar
arrojará un error. Esto es algo que tienes que tener muy en cuenta.
Desempaquetando archivos
Ahora que ya tienes claro como empaquetar archivos, es necesario que sepas como puedes desempaquetarlos. Es tan importante una operación como otra. Así, para desempaquetar, tienes que utilizar la opción x, de extraer. Así, para desempaquetar, ejecuta la siguiente instrucción,
tar -xvf empaquetado.tar
Extraer un archivo de un paquete
Sin embargo, a lo mejor no quieres desempaquetar todo el archivo, extraer todos los archivos de tu paquete, sino que solo quieres uno concreto. ¿Es posible extraer un archivo del paquete? Si. Para extraer un archivo del paquete tienes que ejecutar,
tar -xvf empaquetador.tar <nombre-del archivo-a-extraer>
Vamos, es lo mismo que desempaquetar todo, pero indicando única y exclusivamente los archivos que realmente necesitas. Indicar, que la operación de extraer, no quita el archivo en cuestión de tu paquete, sino, que únicamente lo extrae. Para quitar el archivo del paquete, necesitas utilizar otra opción que te indico mas adelante.
Listando el contenido
Pero ¿cual es el contenido del paquete que he creado? En este caso, puedes utilizar la siguiente instrucción,
tar -tvf empaquetado.tar
Si no indicas la opción -v
solo te mostrarás los archivos empaquetados. Utilizando esta opción, además te muestra otra información como el propietario, los permisos o la fecha.
Quitando un archivo del paquete
Una vez creado un determinado paquete, es posible que quieras quitar un archivo, es decir, que el archivo no pertenezca a ese nuevo paquete. Para hacer esto, tienes que tener en cuenta que el paquete no puede estar comprimido. En caso d que esté comprimido no funcionará. Así, para borrar un archivo de un paquete ejecuta,
tar -f empaquetado.tar --delete file12.md
Añadir un archivo a un paquete
Otra situación con la que te puedes encontrar con mas o menos frecuencia es cuando ya creaste el paquete, y te diste cuenta que dejaste un archivo por añadir. En este caso, tienes varias opciones, desde empaquetar de nuevo, a simplemente añadir ese archivo a tu paquete. Así, por ejemplo, si lo que quieres es simplemente añadir el archivo al paquete puedes recurrir a esta opción,
tar -f empaquetado.tar --append file12.md
Pero, ¿y si el archivo ya existe y simplemente lo quieres modificar? En este caso, puedes utilizar la opción,
tar -f empaquetado.tar --update file12.md
No solo esto, sino que también puedes comparar si un archivo que tienes empaquetado es distinto del que no está empaquetado. Lo cierto es que lo vas a comparar por fecha y por tamaño, únicamente, pero por lo menos ya sabes si se ha modificado. Para hacer esto, puedes ejecutar la siguiente instrucción,
tar -f empaquetado.tar --diff file12.md
Esto te devovlerá un resultado como el puedes ver a continuación como ejemplo,
file12.md: La fecha de modificación es distinta
file12.md: El tamaño es distinto
Comprimir y descomprimir
Hasta el momento todo lo has hecho empaquetando archivos, pero si lo que quieres es reducir el tamaño total ocupado, tienes que comprimir esos paquetes. Respecto a la compresión indicarte que tienes distintas opciones,
gzip
es la compresión por defecto, y la puedes declarar utilizando la opción-z
.bzip2
en este caso, tienes que utilizar la opción-j
.
Ahora necesitas combinar estas dos opciones con todo lo que has visto hasta el momento. Así para empaquetar y comprimir la instrucción que tienes que utilizar es,
tar -cvzf empaquetado.tar.gz *.md
Para el caso de descomprimir,
tar -xvzf empaquetado.tar.gz
Para ver el contenido del archivo
tar -tvf empaquetador.tar.gz
Ahora bien, existe una diferencia en cuanto a las posibilidades que te ofrece un archivo empaquetado y otro comprimido. Esta diferencia radica en las operaciones que podemos efectuar. Así, con un archivo comprimido, no podremos actualizarlo, al menos en primera instancia. Es decir, no podemos utilizar las opciones --delete
, --append
o --update
.
Una solución es desempaquetar, operar y comprimir, como por ejemplo,
gunzip empaquetado.tar.gz; tar -f empaquetado.tar --delete file5.md; gzip empaquetado.tar
Conclusión
Estas son algunas de las opciones que te permite hacer tar. Y digo bien, simplemente algunas de las opciones, y sin lugar a dudas las mas habituales. Y es que tar es toda una navaja suiza que te va a permitir empaquetar archivos y directorios de decenas de formas posibles, no solo lo que has visto hasta el momento. También, puedes especificar directorios, excluir archivos por nombre o incluso por patrón, y mucho mas.
Imagen de portada de jesse ramirez en Unsplash