Pobierz plik z rzeczywistą nazwą przez wget

9

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.

Neha
źródło
Może następnym razem zadasz takie pytanie w Bioinformatyce . Tutaj też jest na ten temat i zapraszamy do pozostania, ale możesz uzyskać więcej pomocy od osób pracujących w terenie.
terdon
3
@terdon Jak pytasz o zachowanie powłoki wget i * nix w temacie na temat bioinformatyki ?
CVn
1
@ MichaelKjörling wyodrębniałby informacje z NCBI, dlatego to zasugerowałem. Odpowiedź prawdopodobnie wymagałaby prostszego, bardziej bezpośredniego podejścia do uzyskania informacji, których szuka PO, niż rozwiązania powłoki. Na przykład coś w rodzaju „możesz stąd uzyskać te informacje łatwiej”.
terdon
Spójrz na --trust-server-namesargument wget-
ivanivan
3
Należy zauważyć, że nie ma czegoś takiego jak „rzeczywista nazwa” zasobu, do którego odwołuje się adres URL. Serwer sieciowy odpowiada na żądanie pewną zawartością i być może niektórymi nagłówkami, które w jakiś sposób opisują tę treść, ale plik nie musi w ogóle być zaangażowany.
IMSoP,

Odpowiedzi:

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

Pobrany plik to tararchiwum (plik binarny) udostępniane przez dynamiczny link z serwera WWW. wgetnormalnie 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 wgetmożna skorzystać, jeśli skorzystasz z tej --content-dispositionopcji. 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:

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

Lub używając równoważnych długich opcji:

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

Po pobraniu pliku musisz go rozpakować:

tar -xvf GSE48191_RAW.tar

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-compressed CELplików.

Kusalananda
źródło
8

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ć:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
reż
źródło