Como wget um arquivo com nome correto quando redirecionado?

95

Então, depois de algum tempo pesquisando no Google e no Superusuário (e varrendo páginas de manual), não consegui encontrar uma resposta para algo que (eu acho) deveria ser simples:

Se você for aqui:

http://www.vim.org/scripts/script.php?script_id=2340

E tente baixar o tema:

http://www.vim.org/scripts/download_script.php?src_id=9750

Assim:

wget http://www.vim.org/scripts/download_script.php?src_id=9750

Você provavelmente terminará com um arquivo chamado download_script.php?src_id=9750 .

Mas eu quero que ele seja chamado de molokai.vim , que é o que aconteceria se eu usasse um navegador para baixar esse arquivo.

Quais opções eu preciso especificar para o wget para o efeito desejado?

Eu também estaria bem com um comando equivalente ao Curl.

    
por audio.zoom 23.06.2011 / 13:44

5 respostas

142
-O file
--output-document=file

The documents will not be written to the appropriate files, but all will be concatenated together and written to file. If - is used as file, documents will be printed to standard output, disabling link conversion. (Use ./- to print to a file literally named -.)

Então,

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

Ou você pode obter wget para resolver isso usando a opção --content-disposition se suportada pela sua versão.

wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=9750

Advertências de acordo com a página do manual,

--content-disposition

If this is set to on, experimental (not fully-functional) support for "Content-Disposition" headers is enabled. This can currently result in extra round-trips to the server for a "HEAD" request, and is known to suffer from a few bugs, which is why it is not currently enabled by default.

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.

Você pode obter o mesmo comportamento automatizado com curl , usando

curl -JLO http://www.vim.org/scripts/download_script.php?src_id=9750

-O usa o nome remoto e -J força o -O a obter esse nome do cabeçalho de disposição de conteúdo em vez do URL, e -L segue os redirecionamentos, se necessário.

    
por 23.06.2011 / 14:03
69

Com o wget, você pode fazer isso:

wget --trust-server-names <url> 

para salvar o arquivo usando o último nome de arquivo que o servidor lhe fornece.

    
por 29.06.2012 / 07:08
2

Você também pode usar aria2c - parece funcionar bem com os cabeçalhos Content-Disposition.

    
por 24.01.2018 / 04:32
0

Apenas o fyi curl redireciona bem, portanto, usar o seguinte deve funcionar, eu acho , para o que você está procurando.

curl -o molokai.vim http://www.vim.org/scripts/download_script.php?src_id=9750

    
por 23.06.2011 / 14:39
0

Trabalhou com o seguinte:

curl -o molokai.vim link

wget -O somefile.extension link

(caso alterado para menor, ou seja, (o wget -O) para (wget -o)

    
por 15.02.2016 / 07:44