Ich versuche, eine Datei über HTTP von einer Website mit herunterzuladen wget
.
Wenn ich benutze:
wget http://abc/geo/download/?acc=GSE48191&format=file
Ich bekomme nur eine Datei namens index.html?acc=GSE48191
.
Wenn ich benutze:
wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm
Ich bekomme asd.rpm
, aber ich möchte mit dem tatsächlichen Namen herunterladen und möchte den Namen der heruntergeladenen Datei nicht manuell ändern.
--trust-server-names
Argument zuwget
-Antworten:
Die Datei, die Sie herunterladen, ist ein
tar
Archiv (eine Binärdatei), das über einen dynamischen Link von einem Webserver bereitgestellt wird.wget
Normalerweise wird die Datei unter Verwendung eines Teils der von Ihnen verwendeten URL gespeichert. In diesem Fall handelt es sich jedoch nur um einen REST-API-Endpunkt (oder etwas Ähnliches), sodass die Verwendung des Namens unfreundlich wäre (es handelt sich immer noch um einen gültigen Namen und den Namen) Dateiinhalt wäre der gleiche).In diesem Fall stellt der Server jedoch einen "Content Disposition" -Header bereit, der den tatsächlichen Dateinamen enthält
wget
und verwendet werden kann, wenn Sie die--content-disposition
Option verwenden. Diese Option ist in meinem Handbuch für "experimentell" markiertwget
.Sie müssen auch die URL zitieren , so dass der Schal die nicht interpretieren
&
und?
in ihrem Zeichen.Das Äquivalent mit
curl
:Oder verwenden Sie die entsprechenden langen Optionen:
Nachdem Sie die Datei heruntergeladen haben, müssen Sie sie entpacken:
Aufgrund der Art und Weise, wie dieses bestimmte Archiv erstellt wurde, werden die Dateien des Archivs in das aktuelle Verzeichnis entpackt (daher kann es eine gute Idee sein, ein neues Verzeichnis zu erstellen, das Archiv dorthin zu verschieben und es dort zu entpacken ). Die Dateien in diesem Archiv sind
gzip
komprimierteCEL
Dateien.quelle
Die Shell interpretiert Zeichen
?
wie üblich, insbesondere als Platzhalter (was hier keine Rolle spielt) und&
als "in den Hintergrund gestellt". Sie sollten Letzteres bemerkt haben, da sich die Shell-Antwort von einem direkten Befehl unterscheidet.Sie müssen also zitieren:
quelle