155 votes

Comment récupérer un fichier avec un nom correct lorsqu'il est redirigé ?

Ainsi, après un certain temps de recherche sur Google et Super User (et de balayage des pages de manuel), je n'ai pas réussi à trouver une réponse à quelque chose qui (je pense) devrait être simple :

Si vous allez ici :

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

Et essayez de télécharger le thème :

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

Comme ça :

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

Vous vous retrouverez probablement avec un fichier appelé download_script.php?src_id=9750 .

Mais je veux qu'il s'appelle molokai.vim C'est ce qui se passerait si j'utilisais un navigateur pour télécharger ce fichier.

Quelles options dois-je spécifier pour wget pour obtenir l'effet désiré ?

Je serais également d'accord avec une commande équivalente à Curl.

210voto

EightBitTony Points 4061
-O file
--output-document=file

Les documents ne seront pas écrits dans les fichiers appropriés, mais ils seront tous concaténés ensemble et écrits dans le fichier. Si - est utilisé comme fichier, les documents seront imprimés sur la sortie standard, désactivant la conversion des liens. (Utilisez ./- pour imprimer dans un fichier littéralement nommé -. )

Donc,

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

Ou, vous pouvez obtenir wget a automatiquement utiliser le nom de fichier proposé par le serveur en utilisant le --content-disposition si elle est supportée par votre version.

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

Mises en garde conformément à la page de manuel ,

--content-disposition

Si cette option est activée, la prise en charge expérimentale (non entièrement fonctionnelle) des en-têtes "Content-Disposition" est activée. Cela peut actuellement entraîner des allers-retours supplémentaires vers le serveur pour une requête "HEAD", et est connu pour souffrir de quelques bogues, c'est pourquoi il n'est pas actuellement activé par défaut.

Cette option est utile pour certains programmes CGI de téléchargement de fichiers qui utilisent les en-têtes "Content-Disposition" pour décrire le nom d'un fichier téléchargé.

Vous pouvez obtenir le même comportement automatisé avec curl en utilisant,

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

-O utilise le nom distant, et -J force le -O pour obtenir ce nom à partir de l'en-tête content-disposition plutôt que de l'URL, et -L suit les redirections si nécessaire.

4 votes

J'aurais dû préciser que cela devait être automatique.

0 votes

D'après ce que j'ai compris, wget s'appuie sur la page web pour l'informer correctement si l'URL pointe vers un fichier et qu'il doit être enregistré avec quelque chose de différent, en utilisant l'en-tête de disposition du contenu, que wget peut ou non supporter entièrement. Vous ne pouvez donc pas le faire automatiquement avec wget. Curl peut avoir plus ou moins de succès en fonction de la page web.

0 votes

Le but est de pouvoir script ces choses sans un parsing compliqué, curl c'est bien mais jusqu'à présent je n'ai pas été capable de rassembler des options décentes pour cela non plus

96voto

Thi Duong Nguyen Points 1023

Avec wget, vous pouvez le faire :

wget --trust-server-names <url> 

pour enregistrer le fichier en utilisant le dernier nom de fichier que le serveur vous a donné.

6 votes

Je me demande quelle est la différence entre --trust-server-names y --content-disposition

4 votes

On dirait que --trust-server-names suit redirige vers un fichier différent, et --content-disposition nomme le fichier avec le nom spécifié dans l'en-tête de réponse sans qu'aucune redirection ne soit nécessaire.

6 votes

Pourquoi n'est-ce pas une fonctionnalité par défaut ?!?!

5voto

Skyler Points 244

Vous pouvez également utiliser aria2c - cela semble bien fonctionner avec les en-têtes Content-Disposition.

0voto

Zahid Hussain Points 11

Travaillé en suivant :

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

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

(changement de la casse en plus petit c'est-à-dire (le wget -O) en (wget -o)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X