Llevo años usando TAR (junto con Gzip o con Bzip2) para empaquetar y comprimir directorios, pero de repente empiezo a usarlo para crear copias de seguridad de forma manual y me doy cuenta de que no sé como extraer sólo parte de los archivos que he empaquetado.
No escribiré aquí como comprimir y descomprimir en *.tar.gz o en *.tar.bz2 (aunque tampoco tiene mucho secreto). Supongamos que tenemos esta estructura de directorios y archivos:
directorio/ |-- subdirectorio-1 | |-- archivo-11.txt | `-- archivo-12.dat |-- subdirectorio-2 | `-- archivo-20.ogg `-- subdirectorio-3
Hemos creado un archivo TAR que contiene este árbol, y lo hemos guardado con el nombre directorio.tar, Posteriormente queremos mostrar el contenido de ese archivo *.tar, lo hacemos de la siguiente forma:
$ tar tvf directorio.tar drwxr-xr-x usuario/grupo 0 2008-12-05 16:51 directorio/ drwxr-xr-x usuario/grupo 0 2008-12-05 16:51 directorio/subdirectorio-3/ drwxr-xr-x usuario/grupo 0 2008-12-05 16:52 directorio/subdirectorio-1/ -rw-r--r-- usuario/grupo 0 2008-12-05 16:51 directorio/subdirectorio-1/archivo-11.txt -rw-r--r-- usuario/grupo 0 2008-12-05 16:51 directorio/subdirectorio-1/archivo-12.dat drwxr-xr-x usuario/grupo 0 2008-12-05 16:52 directorio/subdirectorio-2/ -rw-r--r-- usuario/grupo 0 2008-12-05 16:52 directorio/subdirectorio-2/archivo-20.ogg
Y finalmente, si lo que queremos realmente es extraer sólo uno de los subdirectorios, haremos lo siguiente:
$ tar xvf directorio.tar directorio/subdirectorio-1 directorio/subdirectorio-1/ directorio/subdirectorio-1/archivo-11.txt directorio/subdirectorio-1/archivo-12.dat
En este caso hemos extraido un subdirectorio entero, pero podemos extraer archivos concretos, además podemos usar wildcards como * o ? en el comando.
¿Y que pasa con los archivos comprimidos con Gzip o con Bzip2? Pues los comandos son prácticamente los mismos, sólo tenemos que añadir la letra z en caso de *.tar.gz o la letra j en el caso de *.tar.bz2.