Imprime o conteúdo de cada arquivo em um arquivo tar

0

Listar os arquivos em um arquivo tar compactado com gzip é fácil com xvfz :

$ date >> a
$ date >> b

$ cat a b
Sun Sep 24 14:27:01 IDT 2017
Sun Sep 24 14:27:05 IDT 2017

$ cat dates.tgz | tar xfvz -
x a
x b

Existe uma maneira elegante de imprimir o conteúdo de cada arquivo no tar, no espírito de:

$ cat dates.tgz | tar <?> -
a:
Sun Sep 24 14:27:01 IDT 2017
b:
Sun Sep 24 14:27:05 IDT 2017
    
por Adam Matan 24.09.2017 / 13:30

2 respostas

1

Eu acredito que isso funcionará:

tar --wildcards --to-stdout -xvf archive.tar.gz './*'

Observe que pode haver problemas com './*' part: não sei ao certo como exatamente o tar corresponde a caminhos. Obviamente, se você tiver um caminho absoluto no arquivo, isso não corresponderá, mas, novamente, não tenho certeza se apenas '*' é a melhor opção.

Acredito que algumas implementações de alcatrão aceitarão -O também / no lugar de --to-stdout . Não tenho certeza se --wildcards é exclusivo da implementação do GNU.

Aqui está a versão que evita usar --wildcards

tar -xOvf archive.tar.gz $(tar -tf archive.tar.gz)
    
por 24.09.2017 / 13:44
1

Além de usar o GNU tar com -O ou --to-stdout , não há uma boa maneira de fazer isso de qualquer maneira portátil:

$ tar -tvzf dates.tgz
-rw-r--r-- kk/wheel         30 2017-09-25 08:41 a
-rw-r--r-- kk/wheel         30 2017-09-25 08:41 b

$ tar -Ov -xzf dates.tgz
a
Mon Sep 25 08:41:51 CEST 2017
b
Mon Sep 25 08:41:53 CEST 2017

A implementação BSD tar (no OpenBSD) não suporta um -O flag, e o padrão pax archiver também é incapaz de extrair arquivos para a saída padrão.

    
por 24.09.2017 / 14:08

Tags