¿Cómo podemos extraer archivos específicos de un archivo tar.gz grande? Encontré el proceso de extraer archivos de un tar en esta pregunta pero, cuando probé el comando mencionado allí, recibí el error:
$ tar --extract --file={test.tar.gz} {extract11}
tar: {test.tar.gz}: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
¿Cómo puedo extraer un archivo tar.gz
?
Respuestas:
También puedes usar
tar -zxvf <tar filename> <file you want to extract>
Debe escribir el nombre del archivo exactamente como lo
tar ztf test.tar.gz
muestra. Si dice./extract11
, por ejemplo , osome/bunch/of/dirs/extract11
, eso es lo que tiene que dar (y el archivo se mostrará exactamente con ese nombre, los directorios necesarios se crean automáticamente).-x
: indica a tar que extraiga los archivos.-f
: especifica el nombre del archivo / tarball.-v
: Detallado (muestra el progreso al extraer archivos).-z
: filtra el archivo a través de gzip, úsalo para descomprimir archivos .gz.fuente
$ tar -zxvf test.tar.gz extract11
tar: extract11: Not found in archive
tar: Error exit delayed from previous errors
tar tf archive.tar.gz | grep extract11
compruebe si extract11 está en el archivo o notar ztf test.tar.gz
muestra. Si dice./extract11
, por ejemplo , osome/bunch/of/dirs/extract11
, eso es lo que tiene que dar (y el archivo se mostrará exactamente con ese nombre, los directorios necesarios se crean automáticamente).-z
opción no funciona en algunas versiones de Unix como HP-UX.f
no debe estar al final. Pero debe ser seguido directamente por el nombre del archivo. Este ejemplo con todas las otras opciones después el nombre de alquitrán funciona bien:tar -f mytar.tar.gz -zxv dir/somefile
. Extrae "dir / somefile" de "mytar.tar.gz".Supongamos que tiene un tarball llamado
lotsofdata.tar.gz
y solo sabe que hay un archivo allí que desea, pero todo lo que puede recordar es que su nombre contiene la palabracontract
. Tienes dos opciones:Use
tar
ygrep
para enumerar el contenido de su tarball para que pueda encontrar la ruta completa y el nombre de cualquier archivo que coincida con la parte que conoce, y luego usetar
para extraer ese archivo ahora que conoce sus detalles exactos, o puede usar dos los conmutadores poco conocidos simplemente extraen todos los archivos que coinciden con lo poco que sabe del nombre de su archivo; no necesita saber el nombre completo ni ninguna parte de su ruta para esta opción. Los detalles son:Opción 1
Esto enumerará los detalles de todos los archivos cuyos nombres contienen su parte conocida. Luego extrae lo que quiere usando:
Es posible que necesite
./
frente a su camino para que funcione.opcion 2
Depende de usted lo que encuentre más fácil o más útil.
fuente
tar -xzf lotsofdata.tar.gz <full path and filename from your list above>
funcionó para mí sin dar./
al comienzo de la ruta completa--wildcards
opción. Pude seguir teniendo un comportamiento similar con-x -O *foo
.*foo
fue el nombre de archivo global en mi caso, ya que sabía que el archivo terminaba con foo.Intenté extraer unos cientos de archivos de un tarball con miles de archivos el otro día. Los archivos que necesito no pueden ser referenciados por un solo comodín. Así que busqué en Google y encontré esta página.
Sin embargo, ninguno de los trucos anteriores parece bueno para mi tarea. Terminé leyendo al hombre y encontré esta opción
--files-from
, así que mi solución final esY funciona como un encanto.
Actualización: el archivo de lista debe tener el mismo formato que vería
tar -tvf
, de lo contrario no podría extraer ningún archivo.fuente
Tu ejemplo funciona para mí si omites las llaves
Si su archivo extract11 está en una subcarpeta, debe especificar la ruta dentro del tarball.
fuente
$ tar --extract --file=test.tar.gz extract11
tar: extract11: Not found in archive
tar: Error exit delayed from previous errors
A continuación encontrará los ejemplos de extracción de archivos específicos del archivo tar.gz.
Del archivo local:
Desde URL remota:
fuente