Як вимкнути файл з правильним ім'ям при перенаправлення?


117

Тож, через деякий час пошуку в Google та Super User (та скануванні сторінок man) я не зміг знайти відповідь на те, що (я думаю) повинно бути простим:

Якщо ви їдете сюди:

http://www.vim.org/scripts/script.php?script_id=2340

І спробуйте завантажити тему:

http://www.vim.org/scripts/download_script.php?src_id=9750

Так:

wget http://www.vim.org/scripts/download_script.php?src_id=9750

Ви, ймовірно, отримаєте файл з назвою download_script.php?src_id=9750.

Але я хочу, щоб його називали molokai.vim, а це було б, якби я використовував браузер для завантаження цього файлу.

Які параметри мені потрібно вказати для wget для отримання потрібного ефекту?

Я також був би в порядку з еквівалентною командою Curl.

Відповіді:


162
-O file
--output-document=file

Документи не будуть записані у відповідні файли, але всі вони будуть об'єднані разом та записані у файл. Якщо -використовується як файл, документи будуть надруковані на стандартний вихід, відключаючи перетворення посилань. (Використовуйте ./-для друку у файл, буквально названий -.)

Тому,

wget -O somefile.extension http://www.vim.org/scripts/download_script.php?src_id=9750

Або, можливо, вам вдасться розібратися wgetз цим, використовуючи параметр --content-disposition, якщо він підтримується вашою версією.

wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=9750

Застереження відповідно до чоловічої сторінки,

--content-disposition

Якщо це встановлено, увімкнено експериментальну (не повністю функціональну) підтримку заголовків "Контент-диспозиція". Наразі це може призвести до додаткових зворотних подорожей на сервер для запиту "HEAD", і, як відомо, вони страждають від декількох помилок, через що він не включений за замовчуванням.

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

Ви можете досягти тієї ж автоматизованої поведінки curl, використовуючи,

curl -JLO http://www.vim.org/scripts/download_script.php?src_id=9750

-Oвикористовує віддалене ім’я та -Jзмушує -Oотримати це ім'я із заголовка диспозиції вмісту, а не з URL-адреси, а -Lпри необхідності слід переспрямувати.


2
Я повинен був уточнити, що це має бути автоматичним
audio.zoom

Як я розумію, wget покладається на веб-сторінку, щоб правильно повідомити його, якщо URL-адреса вказує на файл і його потрібно зберегти чимось іншим, використовуючи заголовок диспозиції вмісту, який wget може або не може повністю підтримувати. Тож ви не можете робити це автоматично з wget. Curl може мати більш-менш успіх залежно від веб-сторінки.
EightBitTony

сенс у тому, щоб мати можливість скриптувати ці речі без складного розбору, згортання чудово, але поки що я так і не змогла зібрати гідні варіанти для цього
audio.zoom

2
Ага - я помиляюся, дивіться оновлену відповідь. Ось чому сайти stackexchange працюють добре - кожен щось дізнається, навіть люди відповідають на запитання!
EightBitTony

1
Це працювало на мене для подкасту stackexchange, який мене клопоче якийсь час. Дякую.
Річард Кемпбелл

75

За допомогою wget ви можете це зробити:

wget --trust-server-names <url> 

щоб зберегти файл за допомогою останнього імені файлу, який надає сервер.


2
Цікаво, в чому різниця між --trust-server-namesі--content-disposition
JamesTheAwesomeDude

3
Схоже, --trust-server-namesнаступні переадресації на інший файл і --content-dispositionназивають файл із ім'ям, вказаним у заголовку відповіді, не вимагаючи перенаправлення.
Асфанд Казі

1
Чому це не функціонал за замовчуванням?!?!
hopeseekr

8
@hopeseekr Сервер може бути неслухняним і викликати файл .bashrc, якщо ви не стежите уважно. list.gnu.org/archive/html/bug-wget/2012-04/msg00059.html
Патрік Конхеді

3

Ви також можете використовувати aria2c - це, здається, добре працює із заголовками Content-Disposition.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.