¿Puedo extraer una carpeta específica usando tar a otra carpeta?

14

Soy nuevo en el mundo de Linux y parece que me he topado con un obstáculo. Sé que puedo extraer un archivo específico usando el comando, tar xvfz archivename.tar.gz sampledir/sin embargo, ¿cómo puedo extraer sampledir/en testdir/lugar de la ruta en la que está el archivo, por ejemplo, el archivo está en la ruta /tmp/archivename.tar.gzy me gustaría extraer sampledira testdircuál está en la ruta /tmp/testdir.

CacahuetesMonkey
fuente

Respuestas:

19

Lo que estás buscando es la -Copción:

$ man tar
<snip>

-C, --directory DIR
       change to directory DIR

Uso, según su ejemplo:

$ tar xvzf archivename.tar.gz -C /tmp/testdir/ sampledir/

Además, puede interesarle saber que las versiones modernas de tarno requieren el zindicador para descomprimir archivos comprimidos; Se darán cuenta de que es una .gzy hacer lo correcto automáticamente.

Manitas5
fuente
Gracias. Curiosamente lo intenté antes de publicar la pregunta y falló. Tal vez me perdí una opción. Lo intentaré de nuevo.
PeanutsMonkey
Brillantez. Siempre me olvido de esto para archivos grandes.
zmonteca
3

No necesitas jugar juegos locos sin desmarcar todo. Tar solo admite la extracción de un subconjunto de archivos en un archivo, como se muestra en el siguiente ejemplo (trivial):

/tmp $ mkdir tarsrc
/tmp $ cd tarsrc
/tmp/tarsrc $ mkdir a b
/tmp/tarsrc $ touch a/aaa b/bbb
/tmp/tarsrc $ tar cf ../tartest.tar .
/tmp/tarsrc $ cd ..
/tmp $ mkdir tardest
/tmp $ cd tardest
/tmp/tardest $ tar xf ../tartest.tar ./a    
/tmp/tardest $ ls -R
.:
a/

./a:
aaa

El truco es que la especificación de ruta debe coincidir exactamente con el contenido del archivo tar. Entonces, cuando haces un tar tf, si el camino comienza ./, tienes que ponerlo, y si no lo tiene, debes dejarlo afuera. Además, si desea extraer una ruta sub-sub-sub-sub-sub-sub-sub-ruta, terminará N niveles profundos en el sistema de archivos cuando haya terminado.

womble
fuente
Gracias womble Tal vez no sea el ejemplo correcto para usar, pero estoy comparando tar con Winzip, WinRAR, etc. y posiblemente tar es el comando incorrecto que se debe usar, sin embargo, dado que he visto ejemplos de tar desarchivar archivos gzip y bzip, esperaba poder aplique un proceso similar, por ejemplo, seleccione el archivo que desea desarchivar (tar lo hace) y seleccione la ruta a la que desea extraer (tar no hace esto a menos que esté en el directorio específico).
PeanutsMonkey
Desea la -Copción de alquitrán, entonces.
womble