Comprimir con tar en la terminal
A la hora de comprimir y descomprimir archivos y directorios completos de forma recursiva en Linux podemos usar diferentes programas: zip
, gzip
, p7zip
, bzip2
, xz
y tar
entre otros.
Todos pueden ser mejores o peores pero lo más importante es con cual te sientes más cómodo y, en este caso, vamos a usar el comando tar
.
Si queremos empaquetar y comprimir un archivo usaremos la siguiente instrucción, con las siguientes opciones recomendadas:
tar -cvf archivo_comprimido.tar archivo_a_comprimir.txt
Si es un directorio lo que queremos comprimir, con todo su contenido, en lugar de poner el nombre del archivo a comprimir ponemos la ruta del directorio.
tar -cvf directorio_comprimido.tar /ruta/al/directorio
Las opciones que hemos usado son las siguientes:
c
-> Creamos un nuevo archivov
-> Muestra el progreso de cada archivo conforme lo va procesandof
-> Damos un nombre al archivo comprimido
Mejorar la compresión con gzip
Una opción muy buena que tiene el comando tar
es que nos permite mejorar el nivel de compresión usando el algoritmo gzip
para lo cual solo tenemos que añadir la opción z
a las opciones y en lugar de ponerle al archivo la extensión .tar
le ponemos la extensión .tar.gz
:
tar -cvzf directorio_comprimido.tar.gz /ruta/al/directorio
z
-> Usa el algoritmo de compresióngzip
Mejorar, aún más, la compresión con bzip2
Podemos mejorar, aún más, el nivel de compresión usando el algoritmo bzip2
en lugar de gzip
.
El precio a pagar por este nivel de compresión es que la operación será más lenta para comprimir y descomprimir.
En esta caso cambiaremos la opción z
por j
y la extensión en este caso será .tar.tb2
(también puede ser .tar.tbz
).
tar -cvjf directorio_comprimido.tar.gz /ruta/al/directorio
j
-> Usa el algoritmo de compresiónbzip2
Ver el contenido del archivo comprimido
Podemos ver el contenido del archivo después de su compresión.
tar -tvf archivo_comprimido.tar
Las opciones nos indican lo siguiente:
t
-> Lista el contenido del archivo comprimidov
-> Muestra el progreso de cada archivo conforme lo va procesandof
-> Damos un nombre al archivo comprimido
Si hemos usado uno de los algoritmos de compresión usaremos la misma instrucción escribiendo la extensión correspondiente.
Añadir uno o varios archivos (o un directorio) a un archivo comprimido
Si ya tenemos nuestro archivo comprimido y, por algún motivo, queremos añadirle al contenido otros archivos o incluso un directorio tendremos que usar la opción r
, quedando la instrucción de la siguiente manera, pero hay que tener en cuenta que no es posible si hemos usado los algoritmos de compresión gzip
o bzip2
:
tar -rvf archivo_comprimido.tar archivo_a_incluir.txt
y si es un directorio:
tar -rvf archivo_comprimido.tar ruta/al/directorio
Descomprimir un archivo tar
La operación contraria a lo realizado hasta ahora es descomprimir un archivo previamente comprimido con el comando tar
.
tar -xvf archivo_comprimido.tar
En este caso usamos la nueva opción x
, con la cual le indicamos que queremos extraer todo el contenido del archivo comprimido.
x
-> Extraer el contenido del archivo
Extraer uno o varios archivos del archivo comprimido
Hay veces que el contenido de un archivo comprimido es de varios cientos, o quizás más, archivos y solo necesitamos extraer uno o varios, pero no todos los existentes.
En este caso usaremos la instrucción anterior pero añadiendo al final de la misma el nombre o nombres de los archivos que necesitamos extraer.
tar -xvf archivo_comprimido.tar archivo1.txt archivo2.txt
Importante:
Si dentro del archivo comprimido existe una estructura de directorios y queremos extraer un archivo, tendremos que poner la ruta completa de donde se encuentra el archivo a extraer
tar -xvf archivo_comprimido.tar "dir1/dir2/dir3/archivo1.txt" "dir1/dir2/dir3/archivo2.txt"
Lo mismo hay que hacer si queremos extraer un directorio completo, es decir, hay que poner la ruta completa al directorio.
Si el archivo comprimido tiene alguno de los algoritmos de compresión gzip
o bzip2
tendremos que usar la opción correspondiente para la extracción del o de los archivos:
# Para gzip
tar -zxvf archivo_comprimido.tar.gz "dir1/dir2/dir3/archivo1.txt" "dir1/dir2/dir3/archivo2.txt"
# Para bzip2
tar -jxvf archivo_comprimido.tar.bz2 "dir1/dir2/dir3/archivo1.txt" "dir1/dir2/dir3/archivo2.txt"
Extraer archivos siguiendo un patrón determinado
Si queremos extraer todos los archivos .log
que se encuentren en su interior usaremos la siguiente sintaxis.
tar -xvf archivo_comprimido.tar --wilcards '.log'
Si se han usado alguno de los algoritmos de compresión anteriormente vistos actuaremos como hemos visto en las anteriores ocasiones.