Próbuję pobrać plik przez HTTP z witryny internetowej przy użyciu wget
.
Kiedy używam:
wget http://abc/geo/download/?acc=GSE48191&format=file
Dostaję tylko plik o nazwie index.html?acc=GSE48191
.
Kiedy używam:
wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm
Rozumiem asd.rpm
, ale chcę pobierać z rzeczywistą nazwą i nie chcę ręcznie zmieniać nazwy pobieranego pliku.
--trust-server-names
argumentwget
-Odpowiedzi:
Pobrany plik to
tar
archiwum (plik binarny) udostępniane przez dynamiczny link z serwera WWW.wget
normalnie zapisuje plik przy użyciu części adresu URL, którego używasz, ale w tym przypadku jest to tylko punkt końcowy interfejsu API REST (lub coś podobnego), więc nazwa byłaby nieprzyjazna do pracy (nadal byłaby poprawna nazwa i zawartość pliku byłaby taka sama).Jednak w tym przypadku serwer udostępnia nagłówek „Disposition Content” zawierający rzeczywistą nazwę pliku, z której
wget
można skorzystać, jeśli skorzystasz z tej--content-disposition
opcji. W mojej instrukcji ta opcja jest oznaczona jako „eksperymentalna”wget
.Musisz także zacytować adres URL, aby powłoka nie interpretowała zawartych w nim znaków
&
i?
.Odpowiednik za pomocą
curl
:Lub używając równoważnych długich opcji:
Po pobraniu pliku musisz go rozpakować:
Ze względu na sposób utworzenia tego konkretnego archiwum spowoduje to rozpakowanie plików archiwum do bieżącego katalogu (więc utworzenie nowego katalogu, przeniesienie tam archiwum i rozpakowanie może być dobrym pomysłem). Pliki w tym archiwum są
gzip
-compressedCEL
plików.źródło
Powłoka dokonuje zwykłej interpretacji znaków, zwłaszcza
?
jako symboli wieloznacznych (co nie ma tu znaczenia) i&
jako „umieszczonych w tle”. Powinieneś zauważyć to drugie, ponieważ odpowiedź powłoki różni się od polecenia bezpośredniego.Musisz więc zacytować:
źródło