Lista de arquivos em um tarball pela internet

2

Para listar o conteúdo de um arquivo que posso fazer:

tar -tzvf mytarball.tar.gz

Mas isso funciona apenas para arquivos locais. Alguém pode apontar como fazê-lo (se for possível) para arquivos através da Internet.

Eu tentei com um arquivo

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -tzv

Mas dá

gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now

Então o tar funciona corretamente com streams para listagem? Há algum formato de compactação que permita isso (sem precisar baixar o arquivo inteiro)?

    
por user568109 10.03.2014 / 19:50

5 respostas

1

Seu comando funcionaria , se você dissesse wget para enviar o arquivo baixado para stdout ao invés de um arquivo:

wget -q -O /dev/stdout http://… | tar -tzv

No entanto, irá exigir o download do arquivo inteiro, pelo menos para arquivos Tar e Zip. O formato Zip coloca seu "diretório" no final; Enquanto isso, o Tar não tem um único diretório e apenas tem um fluxo linear de pares de cabeçalho + dados, então os nomes dos arquivos estão espalhados por toda parte.

(Certamente deve haver formatos de arquivo que podem ser listados dessa forma, mas não sei os detalhes exatos de qualquer outro formato que esteja por aí.)

    
por 10.03.2014 / 20:14
1

Editar: Não é possível listar o conteúdo de um arquivo pela Internet, a menos que o servidor tenha uma API ou algo para processar o arquivo e gerar os resultados. Você deve baixar o arquivo localmente e depois processar o arquivo.

Isso deve funcionar.

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz && tar -tzvf git-1.8.0.tar.gz

Uma parte do link

List the contents of a tar file

$ tar -tvf file.tar

List the contents of a tar.gz file

$ tar -ztvf file.tar.gz

List the contents of a tar.bz2 file

$ tar -jtvf file.tar.bz2
    
por 10.03.2014 / 20:15
0

Alternativamente, se você pode executar o código shell no host remoto:

ssh remotehost 'tar -tzvf mytarball.tar.gz'

    
por 10.03.2014 / 20:20
0

Para redirecionar a saída de dados HTTP do arquivo para o stdout, é necessário usar o comutador -O , então você pode pegá-lo

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz -O - | tar -tzv

Mas ainda por que você faz isso? Tar não tem lista de arquivos, então você pode baixar o arquivo completo para obter a lista de arquivos, e mais uma vez você precisará baixar o arquivo completo para obter os arquivos desejados. Então, se você planeja obter alguns arquivos desse tar.gz , é melhor salvá-lo e excluí-lo depois.

A única coisa boa sobre isso é obter lista de arquivos para alguma indexação . Para a lista de arquivos remotos, os arquivos ZIP são muito melhores, mas você ainda não pode baixá-los usando o wget.

    
por 10.03.2014 / 20:23
0

Você pode usar:

wget -qO- https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -xvz

O arquivo será baixado, descompactado e a tela mostrará os arquivos.

Mas se você quiser fazer um arquivo Solicite um e não salve-o , use:

wget -q -O- https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -xvz

    
por 10.03.2014 / 20:19

Tags