J'essaie de télécharger un fichier via HTTP à partir d'un site Web en utilisant wget
.
Quand j'utilise:
wget http://abc/geo/download/?acc=GSE48191&format=file
Je reçois uniquement un fichier appelé index.html?acc=GSE48191
.
Quand j'utilise:
wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm
J'obtiens asd.rpm
, mais je veux télécharger avec le nom réel, et je ne veux pas avoir à changer manuellement le nom du fichier téléchargé.
--trust-server-names
argument dewget
-Réponses:
Le fichier que vous téléchargez est une
tar
archive (un fichier binaire), fournie par un lien dynamique à partir d'un serveur Web.wget
enregistrerait normalement le fichier en utilisant une partie de l'URL que vous utilisez, mais dans ce cas, il s'agit simplement d'un point de terminaison REST API (ou quelque chose de similaire), de sorte que le nom ne serait pas convivial avec lequel travailler (ce serait toujours un nom valide et le le contenu du fichier serait le même).Cependant, dans ce cas, le serveur fournit un en-tête "Content Disposition" contenant le nom de fichier réel, qui
wget
peut être utilisé si vous utilisez l'--content-disposition
option. Cette option est marquée "expérimentale" dans mon manuel pourwget
.Vous devez également citer l'URL afin que le shell n'interprète pas les caractères
&
et?
.La chose équivalente en utilisant
curl
:Ou, en utilisant les options longues équivalentes:
Une fois le fichier téléchargé, vous devez le décompresser:
En raison de la façon dont cette archive particulière a été créée, cela décompressera les fichiers de l'archive dans le répertoire actuel (donc créer un nouveau répertoire, y déplacer l'archive et la décompresser peut être une bonne idée). Les fichiers de cette archive sont des fichiers
gzip
compressésCEL
.la source
Le shell fait l'interprétation habituelle des caractères, en particulier en
?
tant que caractère générique (ce qui n'a pas d'importance ici) et en&
tant que «mis en arrière-plan». Vous devriez avoir remarqué ce dernier, car la réponse du shell est différente d'une commande directe.Vous devez donc citer:
la source