Wie kann ich eine Datei mit korrektem Namen bei der Weiterleitung markieren?

117

Nach einiger Zeit der Suche in Google und Super User (und des Scannens von Manpages) konnte ich keine Antwort auf etwas finden, das (meiner Meinung nach) einfach sein sollte:

Wenn Sie hier hingehen:

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

Und versuchen Sie, das Thema herunterzuladen:

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

Wie so:

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

Sie werden wahrscheinlich mit einer Datei namens enden download_script.php?src_id=9750.

Aber ich will es genannt werden molokai.vim, das ist , was passieren würde , wenn ich einen Browser verwendet , um diese Datei herunterzuladen.

Welche Optionen muss ich für wget angeben, um den gewünschten Effekt zu erzielen?

Ich würde auch einen Curl-äquivalenten Befehl akzeptieren.

audio.zoom
quelle

Antworten:

162
-O file
--output-document=file

Die Dokumente werden nicht in die entsprechenden Dateien geschrieben, sondern alle zusammen verkettet und in eine Datei geschrieben. Bei -Verwendung als Datei werden Dokumente auf die Standardausgabe gedruckt, wodurch die Linkkonvertierung deaktiviert wird. (Verwenden Sie ./-diese Option , um in eine Datei mit dem wörtlichen Namen zu drucken. -.)

Damit,

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

Möglicherweise können Sie wgetdies auch mit der Option --content-disposition herausfinden, wenn dies von Ihrer Version unterstützt wird.

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

Vorsichtsmaßnahmen gemäß der Manpage,

--content-disposition

Wenn diese Option aktiviert ist, wird die experimentelle (nicht voll funktionsfähige) Unterstützung für "Content-Disposition" -Kopfzeilen aktiviert. Dies kann derzeit zu zusätzlichen Roundtrips zum Server für eine "HEAD" -Anforderung führen und es treten bekanntermaßen einige Fehler auf, weshalb die Option derzeit nicht standardmäßig aktiviert ist.

Diese Option ist nützlich für einige CGI-Programme zum Herunterladen von Dateien, die "Content-Disposition" -Header verwenden, um den Namen einer heruntergeladenen Datei zu beschreiben.

Sie können dasselbe automatisierte Verhalten erzielen curl, indem Sie

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

-OVerwendet den Remote-Namen und -Jerzwingt -O, dass der Name aus dem Content-Disposition-Header und nicht aus der URL -Labgerufen wird. Bei Bedarf werden Umleitungen verwendet.

EightBitTony
quelle
2
Ich hätte angeben sollen, dass dies automatisch erfolgen muss
audio.zoom
Wie ich es verstehe, verlässt sich wget auf die Webseite, um sie korrekt zu informieren, wenn die URL auf eine Datei verweist und sie mit etwas anderem gespeichert werden muss, wobei der Inhaltsdisposition-Header verwendet wird, der möglicherweise vollständig unterstützt wird oder nicht. Mit wget geht das also nicht automatisch. Curl kann je nach Webseite mehr oder weniger Erfolg haben.
EightBitTony
es geht darum, diese dinge ohne kompliziertes parsen
skripten
2
Aha - ich irre mich, siehe aktualisierte Antwort. Aus diesem Grund funktionieren StackExchange-Sites gut - jeder lernt etwas, sogar die Leute, die die Fragen beantworten!
EightBitTony
1
Dies funktionierte für mich für den Stackexchange-Podcast, der mich schon eine Weile nervte. Vielen Dank.
Richard Campbell
75

Mit wget können Sie dies tun:

wget --trust-server-names <url> 

um die Datei unter dem letzten vom Server angegebenen Dateinamen zu speichern.

Thi Duong Nguyen
quelle
2
Ich frage mich, was der Unterschied ist zwischen --trust-server-namesund--content-disposition
JamesTheAwesomeDude
3
Sieht so aus, als ob --trust-server-namesfollow auf eine andere Datei umleitet und --content-dispositiondie Datei mit dem im Antwortheader angegebenen Namen benennt, ohne dass eine Umleitung erforderlich ist.
Asfand Qazi
1
Warum ist diese Standardfunktionalität nicht?!?!
Hopeseekr
8
@hopeseekr Der Server ist möglicherweise fehlerhaft und ruft die Datei .bashrc auf, wenn Sie nicht genau hinschauen. lists.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Patrick Conheady
3

Sie könnten auch aria2c verwenden - es scheint gut mit den Content-Disposition-Headern zusammenzuarbeiten.

dkam
quelle