Come wget un file con il nome corretto quando reindirizzato?


117

Quindi dopo un po 'di ricerche su Google e Super User (e la scansione di pagine man) non sono riuscito a trovare una risposta a qualcosa che (penso) dovrebbe essere semplice:

Se vai qui:

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

E prova a scaricare il tema:

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

Così:

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

Probabilmente finirai con un file chiamato download_script.php?src_id=9750.

Ma voglio che venga chiamato molokai.vim, che è ciò che accadrebbe se usassi un browser per scaricare questo file.

Quali opzioni devo specificare per wget per l'effetto desiderato?

Starei anche bene con un comando equivalente Curl.

Risposte:


162
-O file
--output-document=file

I documenti non verranno scritti nei file appropriati, ma tutti saranno concatenati insieme e scritti nel file. Se -utilizzato come file, i documenti verranno stampati sull'output standard, disabilitando la conversione del collegamento. (Utilizzare ./-per stampare su un file chiamato letteralmente -.)

Così,

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

Oppure potresti riuscire a wgetrisolverlo usando l'opzione --content-disposition se supportata dalla tua versione.

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

Avvertenze come da pagina man,

--content-disposition

Se impostato su on, viene abilitato il supporto sperimentale (non completamente funzionale) per le intestazioni "Content-Disposition". Ciò può attualmente comportare ulteriori viaggi di andata e ritorno sul server per una richiesta "HEAD" ed è risaputo che presenta alcuni bug, motivo per cui al momento non è abilitato per impostazione predefinita.

Questa opzione è utile per alcuni programmi CGI per il download di file che utilizzano le intestazioni "Content-Disposition" per descrivere quale dovrebbe essere il nome di un file scaricato.

Puoi ottenere lo stesso comportamento automatizzato con curl, utilizzando,

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

-Outilizza il nome remoto e -Jimpone -Odi ottenere quel nome dall'intestazione di disposizione del contenuto anziché dall'URL e, -Lse necessario , segue i reindirizzamenti.


2
Avrei dovuto specificare che questo doveva essere automatico
audio.zoom il

A quanto ho capito, wget si affida alla pagina Web per informarlo correttamente se l'URL punta a un file e deve essere salvato con qualcosa di diverso, utilizzando l'intestazione di disposizione del contenuto, che wget può o non può supportare completamente. Quindi non puoi farlo automagicamente con wget. L'arricciatura può avere più o meno successo a seconda della pagina web.
EightBitTony,

il punto è poter scrivere queste cose senza complicate analisi, il ricciolo va bene, ma finora non sono stato in grado di raccogliere opzioni decenti per questo
audio.zoom,

2
Aha - Sbaglio, vedi risposta aggiornata. Ecco perché i siti di stackexchange funzionano bene: tutti imparano qualcosa, anche le persone rispondono alle domande!
EightBitTony,

1
Questo ha funzionato per me per il podcast stackexchange, che mi aveva infastidito per un po '. Grazie.
Richard Campbell,

75

Con wget puoi farlo:

wget --trust-server-names <url> 

per salvare il file usando l'ultimo nome file che il server ti dà.


2
Mi chiedo quale sia la differenza tra --trust-server-namese--content-disposition
JamesTheAwesomeDude,

3
Sembra che --trust-server-namessegue i reindirizzamenti a un altro file e --content-dispositionnomina il file con il nome specificato nell'intestazione della risposta senza alcun reindirizzamento richiesto.
Asfand Qazi,

1
Perché questa funzionalità predefinita non è?!?!
hopeseekr,

8
@hopeseekr Il server potrebbe essere cattivo e chiamare il file .bashrc se non lo stai guardando attentamente. lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Patrick Conheady,

3

Puoi anche usare aria2c - sembra funzionare bene con le intestazioni di Content-Disposition.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.