Copie um arquivo do arquivo tar.gz aninhado

1

Eu tenho uma situação onde eu quero extrair um arquivo de tar.gz. A estrutura de .tar.gz é como

  • test.tar.gz
    • data1
      • data2
        • data3
          • test2.tar.gz
            • data4
              • data5
                • test.log

Eu quero extrair apenas o arquivo test.log do arquivo test.tar.gz . Eu vi este post com o qual podemos extrair arquivo de tar.gz, mas não em níveis aninhados.

Estou adicionando a saída do tar tfz data1.tar.gz A estrutura da pasta pode ser um pouco diferente, já que você inseriu a estrutura acima manualmente.


data1/.
data1/META.json
data1/TEMP
data1/TEMP/temp-2
data1/TEMP/temp-2/1-chksum.txt
data1/TEMP/temp-2/1
data1/TEMP/temp-2/1/otherfiles
data1/TEMP/temp-2/1/otherfiles/2016_06_24.tar.gz

Portanto, o arquivo test.log está presente em uma pasta aninhada dentro de 2016_06_24.tar.gz

    
por Rohan Sadale 28.07.2016 / 21:57

1 resposta

6

Supondo que dados4 & etc são membros do arquivo compactado test2.tar.gz, e usam GNU tar's opção --strip-components:

tar xzOf ./test.tar.gz data1/data2/data3/test2.tar.gz | \
  tar xzf - --strip-components=2 data4/data5/test.log

... que informa ao primeiro tar para extrair o arquivo tar compactado aninhado para stdout, depois informa ao segundo tar para obter esse arquivo inserido e extrair apenas o arquivo data4 / data5 / test.log, retirando o arquivo primeiros dois componentes para fora. Isso eliminará o arquivo test.log em seu diretório atual. Se você não tem o GNU tar, simplesmente remova a opção --strip-components, e o arquivo será extraído com o caminho que foi arquivado.

    
por 28.07.2016 / 22:11

Tags