Як перейменувати завантажений файл за допомогою wget?


80

Для завантаження статистики SOFA з сервера я використовую команду wget:

wget -c http://sourceforge.net/projects/sofastatistics/files/latest/download?source=dlp

Файл завантаженого файлу в цьому випадку download?source=files. Якщо я додаю --output-documentопцію до команди, щоб перейменувати вихідний файл sofastatistics-latest.deb, формат завантаженого файлу не розпізнається пакетом dpkg.

dpkg-deb: error: `sofastatistics-latest.deb' is not a debian format archive

Як правильно перейменувати завантажений файл за допомогою wget?

ОНОВЛЕННЯ - 08 січня '15

За наданим посиланням завантажений файл завжди буде файлом * .tar.gz. Щоб отримати його із справжнім іменем, просто додайте --content-dispositionопцію як цю (завдяки @ 6EQUJ5!):

wget --content-disposition http://sourceforge.net/projects/sofastatistics/files/latest/download?source=dlp

Але мені потрібен був файл * .deb, тому тут був правильний @creaktive, мені довелося шукати посилання на файл * .deb.

Дякую всім за відповіді!


2
Якщо dpkg так говорить, це справді не архів Debian ... Що там fileсказано?
fge

Згадана вами URL-адреса - це сторінка HTML.
Сальман А

Думаю, ви прийняли неправильну відповідь.
user83039

@ user83039 Це не неправильно, це частково, але ти маєш рацію, я не повинен сприймати цю відповідь як правильну.
Iurie Malai

1
Я виявив, що --trust-server-namesце більше підходить для мого використання. Дивіться також цей дубльований питання SO і той же питання про Unix.SE .
Адам Кац

Відповіді:


111

Перенаправлення стандартного виводу на довільне ім'я файлу завжди працює. Ви робите це правильно, як каже man wget , використовуючи -O

wget http://www.kernel.org/pub/linux/kernel/README -O foo
--2013-01-13 18:59:44--  http://www.kernel.org/pub/linux/kernel/README
Resolving www.kernel.org... 149.20.4.69, 149.20.20.133
Connecting to www.kernel.org|149.20.4.69|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12056 (12K) [text/plain]
Saving to: `foo'

100%[======================================================================================================================================>] 12,056      --.-K/s   in 0.003s  

2013-01-13 18:59:45 (4.39 MB/s) - `foo' saved [12056/12056]

Справді, ви повинні отримати HTML у своєму файлі (зазвичай це можна перевірити за допомогою man-файлу ).

[РЕДАГУВАТИ]

У вашому випадку клієнт отримує 302 знайдено (ви можете перевірити це за допомогою curl -v URL ).

Наступний завиток робить фокус, дотримуючись 3xx:

$ curl -L http://sourceforge.net/projects/sofastatistics/files/latest/download?source=files -o foo.deb
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0   463    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
100 2035k  100 2035k    0     0   390k      0  0:00:05  0:00:05 --:--:-- 1541k
$ file foo.deb 
foo.deb: gzip compressed data, was "sofastats-1.3.1.tar", last modified: Thu Jan 10 00:30:44 2013, max compression

Має бути схожа опція для wget, щоб допустити перенаправлення HTTP.


23

Якщо ви робили те саме завантаження з веб-браузера, і ви помітили, що браузер насправді правильно назвав файл, ви можете скористатися --content-dispositionопцією, щоб дати wget однакову поведінку:

wget --content-disposition http://sourceforge.net/projects/sofastatistics/files/latest/download?source=dlp

Моя робоча сторінка Debian повідомляє про це як про "експериментальну" функцію, але я не можу згадати, що вона не працює для мене:

       --content-disposition
           If this is set to on, experimental (not fully-functional) support for "Content-Disposition" headers is enabled. This can currently result in extra round-trips to the server
           for a "HEAD" request, and is known to suffer from a few bugs, which is why it is not currently enabled by default.

           This option is useful for some file-downloading CGI programs that use "Content-Disposition" headers to describe what the name of a downloaded file should be.

1

Це посилання вказує на редиректор, а не на кінцевий пункт призначення! Отже, ви завантажуєте HTML і перейменовуєте його у .deb. На захаращеній сторінці вгорі є таке:

Завантаження почнеться через 0 секунд ... Проблеми із завантаженням? Будь ласка, використовуйте це пряме посилання або спробуйте інше дзеркало .

Тепер це дійсне посилання (зверніть увагу на downloadпрефікс): http://downloads.sourceforge.net/project/sofastatistics/sofastatistics/1.3.1/sofastats-1.3.1-1_all.deb?r=http%3A%2F % 2Fsourceforge.net% 2Fprojects% 2Fsofastatistics% 2Ffiles% 2Fsofastatistics% 2F1.3.1% 2F & ts = 1358119361 & use_mirror = ufpr

Передайте цю URL-адресу wget. Також зауважте, що SourceForge намагається вас перехитрити, запрошуючи операційну систему через рядок User-Agent. Здається, найкращим припущенням для "wget" є пакет .tar.gz. Отже, ви повинні бути більш конкретними, запитуючи файл деб!


Для цього програмного забезпечення існує версія .tar.gz: sourceforge.net/projects/sofastatistics/files/sofastatistics/ ... Обов’язково виберіть посилання .deb!
креатив
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.