tar: extrai um membro de forma confiável com o possível avanço de barra

1

Digamos que eu tenha dois arquivos tar gerados de maneira um pouco diferente:

$ tar tvf archive1.tar 
-rw-r--r-- root/root 567 2016-09-18 14:28 member1
-rw-r--r-- root/root 1696 2016-09-18 14:28 member2
$ tar tvf archive2.tar 
-rw-r--r-- root/root 567 2016-09-18 14:28 ./member1
-rw-r--r-- root/root 1696 2016-09-18 14:28 ./member2

Como extrair o member1 de forma confiável de um dos dois arquivos? Estou recebendo o alcatrão por um cano, o gerador não está sob meu controle e, embora eu possa executar o gasoduto várias vezes, eu realmente gostaria de evitar fazê-lo sem necessidade.

P.S .:

$ tar xOvf archive1.tar member1 > /dev/null
member1
$ tar xOvf archive2.tar member1 > /dev/null
tar: member1: Not found in archive
tar: Exiting with failure status due to previous errors
    
por andrewsh 18.09.2016 / 17:03

1 resposta

2

Parece que a linha de comando --no-anchored pode fazer o que você deseja. A partir da página man do tar (1) (eles são realmente muito úteis para ler ou pelo menos escanear)

--no-anchored
patterns match after any '/' (default for exclusion)

tar -tvf test
-rw-rw-r-- iain/iain         0 2016-09-18 16:14 ./member1
-rw-rw-r-- iain/iain         0 2016-09-18 16:14 ./member2

Então

tar -xvf test  member1
tar: member1: Not found in archive
tar: Exiting with failure status due to previous errors

E então

tar -xvf test --no-anchored member1
./member1
    
por 18.09.2016 / 17:22

Tags