Завантажте файл із фактичним іменем за допомогою wget


9

Я намагаюся завантажити файл через HTTP з веб-сайту за допомогою wget.

Коли я використовую:

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

Я отримую лише файл, який називається index.html?acc=GSE48191.

Коли я використовую:

wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm

Я отримую asd.rpm, але я хочу завантажити фактичне ім'я, і ​​не хочу вручну змінювати назву завантаженого файлу.


Ви можете поставити подібне запитання щодо біоінформатики наступного разу. Це також тут тематика, і бажано залишитися, але ви можете отримати більше допомоги від людей, які працюють у цій галузі.
terdon

3
@terdon Як запитує про поведінку wget та * nix shell на тему з біоінформатики ?
CVn

1
@ MichaelKjörling витяг інформації з NCBI був би, тому я запропонував її. Відповідь там, швидше за все, передбачає більш простий, прямий підхід до отримання інформації, яку шукає ОП, а не рішення оболонки. Наприклад, щось на кшталт "ви можете отримати цю інформацію простіше"
тердон

Подивіться на --trust-server-namesаргумент до wget-
ivanivan

3
Важливо зауважити, що не існує такого поняття, як "фактична назва" ресурсу, на який посилається URL-адреса. Веб-сервер відповідає на запит з деяким вмістом і, можливо, деякими заголовками, які певним чином описують цей вміст, але тут взагалі не повинно бути файлу.
IMSoP

Відповіді:


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

Завантажуваний файл - це tarархів (двійковий файл), наданий динамічним посиланням з веб-сервера. wgetяк правило, збережіть файл, використовуючи частину URL-адреси, яку ви використовуєте, але в цьому випадку це лише кінцева точка API REST (або щось подібне), тому ім'я буде непривітним для роботи (все одно це буде дійсне ім'я та вміст файлу буде однаковим).

Однак у цьому випадку сервер надає заголовок "Вміст диспозиції", що містить фактичне ім'я файлу, яке wgetможе використовуватись, якщо ви користуєтесь --content-dispositionопцією. Ця опція відзначена «експериментальний» в моєму керівництві по wget.

Вам також потрібно вказати URL, щоб оболонка не інтерпретувала символи &та ?символи в ній.


Рівнозначна річ із використанням curl:

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

Або, використовуючи еквівалентні довгі варіанти:

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

Завантаживши файл, потрібно розпакувати його:

tar -xvf GSE48191_RAW.tar

Завдяки тому, як створено саме цей архів, це дозволить розпакувати файли архіву у поточний каталог (тому створення нового каталогу, переміщення архіву та розпакування його там може бути хорошою ідеєю). Файли в цьому архіві - gzipстислі CELфайли.


8

Оболонка виконує звичайну інтерпретацію символів, особливо ?як підстановку (що тут не має значення) і &як "викладені на другий план". Ви повинні були помітити останнє, оскільки відповідь оболонки відрізняється від прямої команди.

Тому вам потрібно процитувати:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.