Como wget um arquivo com nome correto quando redirecionado?


117

Então, depois de algum tempo pesquisando no Google e no Superusuário (e digitalizando as páginas de manual), não consegui encontrar uma resposta para algo que (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

Igual a:

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 quero que seja chamado molokai.vim, o que aconteceria se eu usasse um navegador para baixar este arquivo.

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

Eu também ficaria bem com um comando equivalente do Curl.

Respostas:


162
-O file
--output-document=file

Os documentos não serão gravados nos arquivos apropriados, mas todos serão concatenados juntos e gravados no arquivo. Se -for usado como arquivo, os documentos serão impressos na saída padrão, desativando a conversão de links. (Use ./-para imprimir em um arquivo chamado literalmente -.)

Assim,

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

Ou você pode conseguir wgetresolver isso usando a opção --content-disposion, se suportado 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 de manual,

--content-disposition

Se estiver ativado, o suporte experimental (não totalmente funcional) para os cabeçalhos "Disposição de Conteúdo" será ativado. Atualmente, isso pode resultar em viagens de ida e volta extras ao servidor para uma solicitação "HEAD" e é conhecido por sofrer alguns bugs, razão pela qual não está atualmente ativado por padrão.

Esta opção é útil para alguns programas CGI de download de arquivos que usam cabeçalhos "Disposição de Conteúdo" para descrever qual deve ser o nome de um arquivo baixado.

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

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

-Ousa o nome remoto e -Jforça a -Oobter esse nome do cabeçalho de disposição do conteúdo em vez do URL e -Lsegue os redirecionamentos, se necessário.


2
Eu deveria ter especificado que isso precisa ser automática
audio.zoom

Pelo que entendi, o wget depende da página da Web para informá-lo corretamente se o URL apontar para um arquivo e precisar ser salvo com algo diferente, usando o cabeçalho de disposição de conteúdo, que o wget pode ou não oferecer suporte total. Então você não pode fazer isso automaticamente com o wget. A ondulação pode ter mais ou menos sucesso, dependendo da página da web.
precisa

o ponto é para ser capaz de roteiro essas coisas sem a análise complicada, onda é bom, mas até agora eu não tenho sido capaz de recolher opções decentes para que seja
audio.zoom

2
Aha - Estou errado, veja a resposta atualizada. É por isso que os sites stackexchange funcionam bem - todo mundo aprende alguma coisa, até mesmo as pessoas que respondem às perguntas!
precisa

1
Isso funcionou para mim no podcast stackexchange, que estava me incomodando há um tempo. Obrigado.
Richard Campbell

75

Com o wget, você pode fazer isso:

wget --trust-server-names <url> 

para salvar o arquivo usando o último nome de arquivo fornecido pelo servidor.


2
Gostaria de saber qual é a diferença entre --trust-server-namese--content-disposition
JamesTheAwesomeDude

3
Parece que o --trust-server-namesseguinte redireciona para um arquivo diferente e --content-dispositionnomeia o arquivo com o nome especificado no cabeçalho da resposta sem que seja necessário redirecionar.
Asfand Qazi 06/07/2015

1
Por que essa funcionalidade padrão não é?!?!
hopeseekr

8
@hopeseekr O servidor pode ser travesso e chamar o arquivo .bashrc se você não estiver assistindo com atenção. lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Patrick Conheady

3

Você também pode usar aria2c - parece funcionar bem com os cabeçalhos de disposição de conteúdo.



Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.