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

Estoy usando este comando en un 5GB archive

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 …

Comentarios

  • ¿Usó una ruta absoluta o relativa? Debería ser relativo, aparte de eso, parece correcto. ¿Cuánto tiempo lo dejaste funcionar y qué tan bueno es tu sistema? Tardará al menos varios minutos en una máquina rápida. ¿Potencialmente una hora o más? ' estoy ejecutando una prueba ahora.
  • Sí, se completó después de ~ 1 hora, pero la ruta absoluta era incorrecta, estabas en lo correcto.
  • En Linux, puede ver qué tan lejos está el archivo tar con cat /proc/$(pidof tar)/fdinfo/0 (adapte el comando si tiene más de un tar proceso en ejecución).
  • La parte importante también es que no haya barra al final. El uso de folder/folder2/ ganó ' t funcionar.

Responder

tar almacena rutas relativas de forma predeterminada . GNU tar incluso lo dice si intenta 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 «s en el archivo tar:

tar -tvf foo.tar 

Y anote el nombre exacto del archivo. En el caso de mi archivo foo.tar, podría extrae /home/foo/bar diciendo:

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

Así que no, la forma en que publicaste no es (necesariamente) la correcta manera de hacerlo. Tienes que omitir la barra inclinada inicial. Si desea simular rutas absolutas, haga cd / primero y asegúrese 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 buenas razones muy obvias por las que tar convierte rutas en rutas relativas. Una es la capacidad de restaurar un archivo en lugares distintos a su fuente original. otra 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 usa el -P opción, tar será archivar rutas absolutas. Por lo tanto, siempre vale la pena comprobar el contenido de archivos grandes antes de extraerlos.

Comentarios

  • --strip-components=N puede ser útil para algunos aquí.
  • en mi caso, fue necesario escribir ./foldername/ en lugar de , supongo que fue porque cuando creé el tar lo creé con tar -cvf santi.tar ./* y cuando " enumerado " el tar esto es lo que decía drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • Y sobre .gz?
  • @PeterKrauss cambia -xvf a -xzvf (agregando el -z) y obviamente foo.tar a foo.tar.gz o como se llame su archivo. Lo mismo ocurre con -j (bz2) y en algunas versiones recientes, -J (xz). De lo contrario, una canalización como zcat foo.tar.gz | tar -xvf - … también funciona.
  • Y recuerde, si está cansado de toda la salida detallada durante la extracción, omita v en todos los ejemplos. Por ejemplo, tar -tf foo.tar y tar -xf foo.tar ....

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *