extraer archivos a una ruta relativa desde un archivo tar que se estaba creando con el indicador -P

extraer archivos a una ruta relativa desde un archivo tar que se estaba creando con el indicador -P

Estoy creando un archivo tar usando la -Pbandera, lo que significa que todas las rutas son absolutas (el inicio /no se elimina de los nombres de los archivos). Lo uso porque estoy guardando varios directorios y necesito que cada archivo se extraiga a su ubicación correcta.

Estoy usando un script para extraer el archivo tar y necesito poder extraer los archivos a otro directorio si se proporciona un argumento opcional.

Creo el archivo tar así:

tar pcjfPv "${ARCHIVE_NAME}".tmp.bz  ${DIR_A} ${DIR_B}

${DIR_A}es /path/ay ${DIR_B}es /path/b.

Si ejecuto el script de extracción sin argumentos, espero que los archivos vayan a sus directorios correctos. Esta parte funciona como se esperaba con tar mxfvjpP.

Sin embargo, cuando el script recibe una ruta en el argumento, quiero extraer los archivos a /path/from/argument/path/ay /path/from/argument/path/b.

¿Es esto siquiera posible? Esto es lo que tengo actualmente:

if [ ! -d "${EXTRACT_TO}" ]; then
    echo "${EXTRACT_TO} does not exist, creating."
    mkdir -p ${EXTRACT_TO}
fi
tar mxfvjP - -C ${EXTRACT_TO}

Eso no funciona. Se crea la ruta ${EXTRACT_TO}, pero los archivos aún se extraen a /path/ay /path/b.

NOTA: No puedo modificar el archivo tar.

Respuesta1

En mi Debian extrayendosin -Prendimientos Removing leading '/' from member names. Quizás todo lo que necesite es no usarlo -Pmientras extrae a otro directorio.


Si hay algún problema con el enfoque anterior, considere --transform. De man 1 tar:

--transform=EXPRESSION, --xform=EXPRESSION
Utilice sedreemplazar EXPRESSIONpara transformar nombres de archivos.

Así que esto

tar -x --transform='s|^/||' …

eliminará una barra diagonal inicial (si está allí) de cada ruta. Pero porque////fooes equivalente a/foo, lo siguiente parece mejor:

tar -x --transform='s|^/*||' …

Eliminará todas las barras diagonales iniciales.

información relacionada