¿Cómo extrae una sola carpeta de un gran archivo tar.gz?

132

Estoy usando este comando en un archivo de 5GB

tar -zxvf archive.tar.gz /folder/in/archive

¿Es esta la forma correcta de hacer esto? Parece estar tardando una eternidad sin salida de línea de comando ...

Garrett Hall
fuente
¿Utilizaste una ruta absoluta o relativa? Debe ser relativo, aparte de eso, se ve bien. ¿Cuánto tiempo lo dejaste correr y qué tan bueno es tu sistema? Tomará al menos varios minutos en una máquina rápida. ¿Potencialmente una hora o más? Estoy haciendo una prueba ahora.
Kevin
Sí, se completó después de ~ 1 hora, pero el camino absoluto estaba mal, estabas en lo correcto.
Garrett Hall
55
En Linux, se puede ver hasta qué punto en el archivo tares con cat /proc/$(pidof tar)/fdinfo/0(adaptar el comando si tiene más de una tarejecución de proceso).
Gilles
La parte importante tampoco es una barra inclinada final. Usar folder/folder2/no funcionará.
Marki555

Respuestas:

145

taralmacena rutas relativas por defecto . GNU tar incluso lo dice si intentas almacenar una ruta absoluta:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

Si necesita extraer una carpeta en particular, eche un vistazo a lo que hay en el archivo tar:

tar -tvf foo.tar

Y tenga en cuenta el nombre de archivo exacto. En el caso de mi foo.tararchivo, podría extraer /home/foo/bardiciendo:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

Entonces, no, la forma en que publicaste no es (necesariamente) la forma correcta de hacerlo. Tienes que dejar de lado la barra diagonal. Si quieres simular rutas absolutas, hazlo cd /primero y asegúrate de ser el superusuario. Además, esto hace lo mismo:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

Hay razones muy obvias y buenas por las que tarconvierte rutas en rutas relativas. Una es la capacidad de restaurar un archivo en lugares distintos de su fuente original. El otro es la seguridad. Puede extraer un archivo, esperar que sus archivos aparezcan en su directorio de trabajo actual y, en su lugar, sobrescribir los archivos del sistema (o su propio trabajo) en otro lugar por error.

Nota: si se utiliza la -Popción, tar se archivar rutas absolutas. Por lo tanto, siempre vale la pena verificar el contenido de los archivos grandes antes de extraerlos.

Alexios
fuente
36
--strip-components=NPuede ser útil para algunos aquí.
Acumenus
2
en mi caso era necesario escribir en ./foldername/lugar de foldername, supongo que fue porque cuando creé el alquitrán lo creé tar -cvf santi.tar ./*y cuando "enumeré" el alquitrán esto es lo que dijodrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago arizti
1
Y alrededor .gz?
Peter Krauss el
1
@PeterKrauss cambia -xvfa -xzvf(agregando la -zopción) y obviamente foo.tara foo.tar.gzo como se llame su archivo. Lo mismo vale para -j(bz2) y en algunas versiones recientes, -J(xz). De lo contrario, una tubería como zcat foo.tar.gz | tar -xvf - …también funciona.
Alexios
Y recuerde, si está cansado de todos los resultados detallados durante la extracción, simplemente omita el ven todos los ejemplos. Por ejemplo, tar -tf foo.tary tar -xf foo.tar ....
Bo R