En las órdenes anteriores hemos visto como comprimir ficheros individuales, pero en muchas ocasiones nos interesa agrupar en un archivo diferentes ficheros, por ejemplo todos los contenidos en un directorio.
También es habitual en linux distribuir los programas con todos sus ficheros agrupados y comprimido, por lo que será necesario saber como descomprimir y desagrupar los ficheros.
Estas operaciones las realiza la orden tar (tape archive); las extensiones que utiliza esta orden para indicar un archivo de ficheros es .tar.
Para agrupar una serie de ficheros en un archivo pondremos:
$ tar cf archivo.tar lista de ficheros
|
Si en lugar de poner ?lista de ficheros? ponemos un directorio, agrupará todos los ficheros contenidos en el directorio y conservando la estructura del subárbol de directorios, los propietarios de los ficheros y sus permisos.
La orden ejecutada de esta forma simplemente comprime los ficheros, pero sin realizar ningún tipo de compresión.
Por ejemplo, para hacer una copia de todo el fichero /etc llamda etc.tar podríamos:
tar cf etc.tar /etc
|
Una posibildad mucho más interesane es agrupar una serie de ficheros en un archivo y comprimirlo con gzip simultáneamente. Podemos combinar la agrupación de tar con un sistema de compresión. Para hacer esto pondremos:
$ tar cfz archivo.tar.gz lista de ficheros
|
Por ejemplo, para hacer una copia de seguridad comprimida del directorio /etc podríamos:
$ tar cfz etc.tar.gz /etc
|
Para agrupar una serie de ficheros en un archivo y comprimirlo con bzip2 simultáneamente pondremos:
$ tar cfj archivo.tar.bz2 lista de ficheros.
|
Como veíamos antes, si en lugar de poner ?lista de ficheros? ponemos un directorio agrupará todos los ficheros contenidos en el directorio y conservando la estructura del subárbol de directorios, permisos y propietarios en el fichero comprimido.
Para desagrupar una serie de ficheros en un archivo pondremos:
$ tar xvf archivo.tar
|
Si el archivo contiene directorios, al desagruparlo estos directorios se crean en el directorio activo. Por ejemplo, agrupamos el directorio /etc como veíamos antes:
tar cf etc.tar /etc
|
Ahora si nuestro directorio activo es /home/usuario y ejecutamos:
tar xvf etc.tar
|
creará el directorio /home/usuario/etc y alí guardará el resto del contenido del archivo. Resumiendo , al agrupar se elimina el directorio raíz de la ruta de los ficheros contendos por lo que siempre resultan rutas relativas al directorio activo.
El siguiente paso lógico es manipular los ficheros agupados y comprimidos (los llamare tar.gz). Igual que creábamosun fichero tar.gz en una sola operación, ahora también vamos a extraer su contenido en una sola operación.
Para desagrupar una serie de ficheros en un archivo comprimido con gzip pondremos:
$ tar xvfz archivo.tar.gz
Si el archivo estuviera comprimido con bzip2 pondríamos:
$ tar xvfI archivo.tar.bz2
En ambos casos podríamos descomprimir el fichero con gunzip o con bunzip2, según el caso y luego desagrupar el archivo no comprimido como se indicaba más arriba.
Otras opciones de tar
tar tiene además otras opciones que resultan interesantes, por ejemplo:
-l Un solo sistema de ficheros. Si tenemos varias particiones y queremos copiar un directorio per no las particiones que tuvier montadas en su interior tendríamos que usar la opción -l. Por ejemplo, para hacer una copia de seguridad de la partición raíz excluyendo el resto de particiones y dispositivos pondríamos:
tar cflz raiz.tar /
|
-k No borra los ficheros que existan previos a la extracción. Puede resultar útil para añadir ciertos ficheros que puedieran faltar en un árbol de directorios pero sin borrar ninguno de los que ya existe.
Por ejemplo, estamos trabajando con unos ficheros de texto en un directorio del que tenemos una copia de seguridad comprimida. Si hemos borrado un accidentalmente podremos reponerlo con tar xvfkz sin que afecte al resto de los ficheros.