Laden Sie die Datei mit dem tatsächlichen Namen von wget herunter

9

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.

Neha
quelle
Vielleicht möchten Sie diese Art von Frage beim nächsten Mal zu Bioinformatik stellen . Es ist auch hier ein Thema und willkommen zu bleiben, aber Sie könnten mehr Hilfe von Leuten bekommen, die vor Ort arbeiten.
Terdon
3
@terdon Wie fragt man nach dem Verhalten von wget und * nix Shell zum Thema Bioinformatik ?
Ein CVn
1
@ MichaelKjörling Informationen aus NCBI zu extrahieren wäre, deshalb habe ich es vorgeschlagen. Eine Antwort dort würde wahrscheinlich einen einfacheren, direkteren Ansatz beinhalten, um an die Informationen zu gelangen, nach denen das OP sucht, anstatt eine Shell-Lösung. So etwas wie "Sie können diese Informationen einfacher von hier aus erhalten".
Terdon
Schauen Sie sich das --trust-server-namesArgument zu wget-
ivanivan
3
Es ist wichtig zu beachten, dass es keinen "tatsächlichen Namen" einer Ressource gibt, auf die durch eine URL verwiesen wird. Ein Webserver antwortet auf eine Anfrage mit einigen Inhalten und möglicherweise einigen Headern, die diesen Inhalt auf irgendeine Weise beschreiben, aber es muss überhaupt keine Datei enthalten sein.
IMSoP

Antworten:

30
wget --content-disposition 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

Die Datei, die Sie herunterladen, ist ein tarArchiv (eine Binärdatei), das über einen dynamischen Link von einem Webserver bereitgestellt wird. wgetNormalerweise 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 wgetund verwendet werden kann, wenn Sie die --content-dispositionOption verwenden. Diese Option ist in meinem Handbuch für "experimentell" markiert wget.

Sie müssen auch die URL zitieren , so dass der Schal die nicht interpretieren &und ?in ihrem Zeichen.


Das Äquivalent mit curl:

curl -J -O 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

Oder verwenden Sie die entsprechenden langen Optionen:

 curl --remote-header-name --remote-name 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

Nachdem Sie die Datei heruntergeladen haben, müssen Sie sie entpacken:

tar -xvf GSE48191_RAW.tar

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 gzipkomprimierte CELDateien.

Kusalananda
quelle
8

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:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
dirkt
quelle