descomprima 'tar' pero cambie el nombre del directorio para extraerlo

26
tar -tf filename.tar
folder1/file
folder1/name
[...]

Me gustaría extraer el archivo y el nombre de la carpeta2 . ¿Se puede hacer esto de una sola vez?

Felipe Alvarez
fuente

Respuestas:

35

Uso -Cy --strip-components(Ver man tar).

Ejemplo:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

Explicación:

La -Cbandera asume que un directorio ya está en su lugar, por lo que el contenido del archivo tar puede expandirse en él. de ahí el mkdir FOLDER.

La --strip-componentsbandera se usa cuando un archivo tar naturalmente se expandiría en una carpeta, digamos, como github, donde se muestra como una repo-name-mastercarpeta. Por supuesto, no necesitaría la carpeta de primer nivel generada aquí, por lo que --strip-componentsconfigurarla 1eliminaría automáticamente esa primera carpeta por usted. Cuanto mayor sea el número, más carpetas anidadas se eliminarán.

Mariana
fuente
Leo man tar. No lo vi --strip-components. agradable
Felipe Alvarez
1
tar-1.14 usa --strip-path, tar-1.14.90 + usa --strip-components. Tal vez un problema aquí?
Mikhail Moskalev
Votaría esto si dara un ejemplo y no solo los cambios, como dice el manual en línea , 3 estilos de argumento dan lugar a confusión.
Iain
Olvidé el -f en tar -xz, piensa yo. Falló por mí Pensé que había estado usando eso sin razón todo este tiempo ...
John Carrell
17

También puede usar la --transformopción para un poco más de flexibilidad. Acepta cualquier operación de reemplazo de sed.

Por ejemplo, así es como extraigo un tarball de Linux a un nuevo directorio para poder aplicar un parche:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
Tom
fuente