tar resultado de wget [closed]

5

Eu quero wget um arquivo e tar , em um comando, eu acho simples, mas não consigo terminar. Eu tentei várias coisas.

wget <url> | tar -cvz file.gz.tar -

tar -cvzf file.tar 'wget <url>'

wget -qO <url> | tar -cvf file.tar

wget <url> -O - | tar

Alguma ajuda?

    
por giannis christofakis 24.03.2015 / 10:35

4 respostas

17

Você realmente deseja tar do arquivo ou está procurando baixar um arquivo para um formato compactado. Tarrar um arquivo é apenas agrupar arquivos (descompactados) em um arquivo (não compactado). Se você quiser baixar um arquivo em um arquivo compactado, você pode usar:

wget -qO - <url>|gzip -c - > file.gz

    
por 24.03.2015 / 11:05
8

Você não pode lidar com fluxos de entrada dessa maneira. Ele é projetado para lidar com arquivos . Se você tivesse conseguido criar um arquivo como descreve, qual seria a aparência dele? Como você o desarmaria? Não haveria nenhum nome de arquivo para criar, apenas dados.

Acho que sua melhor aposta é pegar o arquivo e aplicá-lo em dois comandos separados. Se você não quiser que o arquivo permaneça na sua unidade, use o sinalizador --remove-files do tar:

wget http://example.com/filename && tar cvzf file.tgz --remove-files filename
    
por 24.03.2015 / 10:54
3

Isso não vai funcionar do jeito que você quer. Um arquivo (obviamente com um nome de arquivo) precisa ser armazenado no tar. Esse bit (o nome do arquivo) está obviamente ausente se você apenas enviar o conteúdo do download para tar . Eu não vejo nenhuma maneira de dizer ao tar que ele deve empacotar stdin e especificar um nome de arquivo para isso.

Dito isso, eu realmente não vejo uma maneira de conseguir isso com comandos unix padrão. Obviamente, você pode escrever algo por conta própria, por exemplo, usando python e request e tarfile modules, o que não deve ser difícil se você for um pouco prático com a codificação.

Até lá, ou se você tiver que confiar nos comandos unix disponíveis, você precisará manter o download em um arquivo temporário, tarar e excluir o arquivo. Para não precisar especificar o nome do arquivo várias vezes, sugiro usar uma variável:

DOWNLOAD=<FILENAME>; wget <DOMAIN>/$DOWNLOAD && tar -cvf $DOWNLOAD.tar --remove-files $DOWNLOAD
    
por 24.03.2015 / 10:58
1
wget -qO - <url> |gzip -c > file_name.gz

-c para stdout. isso é > usado. o arquivo vai do wget serializar para o file_name.gz usando a biblioteca de saída padrão.

-qO para enviar arquivo de saída

    
por 25.03.2015 / 04:51

Tags