Por que o wget'ing de uma imagem me fornece um arquivo, não uma imagem?

5

eu faço

wget http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id=2

e faz o download do seguinte arquivo:

3809_obj_sprite.gif?id=2

Como posso salvá-lo da seguinte maneira?

2.png
    
por Szymon Toda 04.08.2012 / 18:11

6 respostas

40

Por que wget escolhe esse nome?

Infelizmente, wget não fará suposições sobre o que você deseja baixar, a menos que você o diga. Não importa se o seu arquivo é uma imagem, um documento, um arquivo zipado, etc.

O arquivo é salvo como qualquer URL com o final - assim, desde a última barra até o final do URL. No seu caso, isso é .gif?id=2 . A parte depois da extensão real do arquivo ( .gif ) está contida na URL, mas é um parâmetro de consulta HTTP . Para wget , no entanto, ele determinará o nome do arquivo de saída.

Como posso definir um nome de arquivo diferente?

Se você quiser especificar um nome de arquivo de saída para wget , adicione a opção -O (letra maiúscula O):

wget example.com/something.gif?id=2 -O 2.gif

Isso substituirá o comportamento padrão e definirá o nome do arquivo como 2.gif . Observe que a opção -o (downcase) especifica o nome do arquivo de saída para todas as mensagens de log wget que poderiam ser impressas no shell.

Finalmente, há a opção --content-disposition , que pode resultar no nome do arquivo correto. Mas isso depende totalmente do servidor do qual você está fazendo o download, enviando as informações corretas do cabeçalho:

This option is useful for some file-downloading CGI programs that use Content-Disposition headers to describe what the name of a downloaded file should be.

A opção ainda está marcada como experimental e, portanto, não está ativada por padrão.

Eu recomendo strongmente que você leia as manpages das ferramentas que você está usando para entender o comportamento delas. Basta digitar man wget e lê-lo, especialmente as opções que ele oferece.

Além disso, para abordar o que @Indrek escreveu em o comentário em sua pergunta : Eu suponho que você tenha um erro de digitação e não queira baixar um arquivo GIF em um arquivo chamado .png - apenas mudando a extensão não automaticamente torná-lo um PNG. GIF e PNG usam codificações diferentes e você terá que usar qualquer tipo de ferramenta de conversão de imagem para converter entre esses formatos. Essa conversão, no entanto, será sem perdas, portanto não há nenhum dano em baixar os arquivos no formato "errado" e convertê-los depois.

    
por 04.08.2012 / 18:15
5

Existe a opção de linha de comando --content-disposition que - se o site fornecer um cabeçalho correto - fará com que seu arquivo seja salvo com o nome correto.

Minha squeeze debian diz que a opção é "experimental" embora ...

    
por 04.08.2012 / 23:36
3

Isto é simplesmente porque olhe para o caminho, ele termina em? id = 2, portanto ele salvará como isso, você pode mover o arquivo ou usar o parâmetro -O para definir um nome de arquivo.

    
por 04.08.2012 / 18:16
1

Se o arquivo que você direciona wget para fazer o download para você é de fato uma imagem, então o que ele faz é uma imagem. O wget não se incomoda em adivinhar o nome e extensão corretos, ele usa o que encontra no URL, por exemplo, http://foobar.com/photo.php?n=cat.png , você pode obter algo como photo.php?n=cat.png , mas ainda é uma imagem. Para corrigir seu problema, simplesmente renomeie esse arquivo para o nome correto cat.png . Observe que, na maioria dos sistemas operacionais, os programas precisam da extensão de arquivo correta para saber que podem abrir um determinado arquivo.

    
por 05.08.2012 / 02:11
1

curl também tem uma opção para adivinhar o nome do arquivo em Content-Disposition header:

curl -OLJ http://services.runescape.com/m=itemdb_rs/3809_obj_sprite.gif?id=2

aqui

-O diz ao curl para salvar em um arquivo em vez de liberar para stdout
-L faz com que ele siga os redirecionamentos
-J habilita a suposição por Content-Disposition em vez de dissecar a URL

    
por 06.08.2016 / 19:33
-1

Além disso, com curl , digamos que você não saiba qual será o nome do arquivo, devido a redirecionamentos ou whathaveyou . Basta seguir os redirecionamentos via -L e canalizá-lo para um arquivo, com a extensão correta ..

curl -L http://links.mrgray.com/ocrtest > /files/file.png

wget pode ter funcionalidade semelhante, não sei.

    
por 04.08.2012 / 23:48

Tags