Estou criando um arquivo tar usando o -P
sinalizador, o que significa que todos os caminhos são absolutos (o entrelinha /
não é removido dos nomes dos arquivos). Eu o uso porque estou tarando vários diretórios e preciso que cada arquivo seja extraído para seu local correto.
Estou usando um script para extrair o arquivo tar e preciso da capacidade de extrair os arquivos para outro diretório se um argumento opcional for fornecido.
Eu crio o arquivo tar assim:
tar pcjfPv "${ARCHIVE_NAME}".tmp.bz ${DIR_A} ${DIR_B}
${DIR_A}
é /path/a
e ${DIR_B}
é /path/b
.
Se eu executar o script de extração sem nenhum argumento, espero que os arquivos vão para seus diretórios corretos. Esta parte funciona como esperado com tar mxfvjpP
.
No entanto, quando o script recebe um caminho no argumento, desejo extrair os arquivos para /path/from/argument/path/a
e /path/from/argument/path/b
.
Isso é mesmo possível? Isto é o que eu tenho atualmente:
if [ ! -d "${EXTRACT_TO}" ]; then
echo "${EXTRACT_TO} does not exist, creating."
mkdir -p ${EXTRACT_TO}
fi
tar mxfvjP - -C ${EXTRACT_TO}
Isso não funciona. O caminho ${EXTRACT_TO}
é criado, mas os arquivos ainda são extraídos para /path/a
e /path/b
.
NOTA : Não consigo modificar o arquivo tar.
No meu Debian extraindo sem
-P
rendimentosRemoving leading '/' from member names
. Talvez tudo o que você precise seja não usar-P
enquanto extrai para outro diretório.Se houver algum problema com a abordagem acima, considere
--transform
. Deman 1 tar
:Então, é isso
removerá uma barra inicial (se houver) de cada caminho. Mas porque
////foo
é equivalente a/foo
, o seguinte parece melhor:Ele removerá todas as barras iniciais.