wget з подвійними кодами в http завантаженнях


53

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

https://foo/bar.1234.tar.gz

Згідно з довідковою сторінкою , wget дозволяє вам вимикатись та вмикатись під час роботи з ftp-сайтом, однак у мене є http-адреса.

Як я можу використовувати підстановку під час використання wget? Я використовую gnu wget.

Те, що я спробував.

/usr/local/bin/wget -r "https://foo/bar.*.tar.gz" -P /tmp

Оновлення

Використання -A призводить до завантаження всіх файлів, що закінчуються на .tar.gz на сервері.

/usr/local/bin/wget -r "https://foo/" -P /tmp -A "bar.*.tar.gz"

Оновлення

З відповідей, це синтаксис, який з часом спрацював.

/usr/local/bin/wget -r -l1 -np "https://foo" -P /tmp -A "bar*.tar.gz"

2
Це не зовсім те, що ви шукаєте, але це пов’язано: Curl має можливість використовувати основні підстановки, наприклад:curl "http://example.com/picture[1-10].jpg" -o "picture#1.jpg"
Hello World

1
Один Гоча для мене був -e robots=offпараметр НЕ підкорятися robots.txt: stackoverflow.com/a/11124664/1097104
Juuso Ohtonen

Я знайшов додавання прапорів, -nHа --cut-dirs=<number>також був корисним
Randall

Відповіді:


62

Я думаю, що ці комутатори будуть робити все, що ви хочете wget:

   -A acclist --accept acclist
   -R rejlist --reject rejlist
       Specify comma-separated lists of file name suffixes or patterns to 
       accept or reject. Note that if any of the wildcard characters, *, ?,
       [ or ], appear in an element of acclist or rejlist, it will be 
       treated as a pattern, rather than a suffix.

   --accept-regex urlregex
   --reject-regex urlregex
       Specify a regular expression to accept or reject the complete URL.

Приклад

$ wget -r --no-parent -A 'bar.*.tar.gz' http://url/dir/

15

Є вагома причина, що це не може працювати безпосередньо з HTTP, і це те, що URL-адреса не є файловим шляхом, хоча використання /розмежувача може зробити його схожим, і вони іноді відповідають. 1

Зазвичай (або, історично склалося), веб-сервери часто роблять ієрархії дзеркальних каталогів (для деяких - наприклад, Apache - це свого роду інтеграл) і навіть надають індекси каталогів, як файлова система. Однак нічого про протокол HTTP цього не вимагає.

Це дуже важливо, тому що якщо ви хочете застосувати Glob на , скажімо, все , що є подпуть http://foo/bar/, якщо сервер не надає якої - то механізм , щоб надати вам такий (наприклад , згаданий вище індекс), немає нічого , щоб застосувати його в Glob до . Тут немає файлової системи для пошуку. Наприклад, тільки тому, що ви знаєте, що є сторінки, http://foo/bar/one.htmlі http://foo/bar/two.htmlце не означає, що ви можете отримати список файлів і підкаталогів через http://foo/bar/. Це було б повністю за протоколом, щоб сервер повертав 404 для цього. Або може повернути список файлів. Або він може надіслати вам приємне зображення у форматі jpg. І т.д.

Тож тут немає жодного стандарту, який би wgetміг експлуатувати. AFAICT, wget працює над відображенням ієрархії шляху шляхом активного вивчення посилань на кожній сторінці . Іншими словами, якщо ви рекурсивно дзеркально http://foo/bar/index.htmlзавантажуєте, index.htmlа потім витягуєте посилання, які є підпунктом цього. 2-A перемикач просто фільтр , який застосовується в цьому процесі.

Якщо коротко, якщо ви знаєте, що ці файли десь індексовані, ви можете почати з цього використання -A. Якщо ні, то вам не пощастило.


1. Звичайно, URL-адреса FTP також є URL-адресою. Однак, хоча я мало що знаю про протокол FTP, я б здогадався, виходячи з природи, що він може бути такою формою, яка дозволяє здійснювати прозоре глобулювання.

2. Це означає, що може бути дійсна URL-адреса, http://foo/bar/alt/whatever/stuff/яка не буде включена, оскільки вона жодним чином не пов'язана ні з чим у наборі речей, пов’язаних із цим http://foo/bar/index.html. На відміну від файлових систем, веб-сервери не зобов’язані робити макет свого вмісту прозорим, а також не потрібно робити це інтуїтивно зрозумілим чином.


0

Вищеописане рішення "-Артикул" може не працювати з деякими веб-сторінками. Це моя обробка, з подвійним wget:

  1. wget сторінки
  2. grep для візерунка
  3. wget файл (и)

Приклад: припустимо, це сторінка новин про подкаст, і я хочу, щоб 5 файлів mp3 було зверху сторінки:

wget -nv -O- https://example/page/ |
 grep -o '[^"[:space:]]*://[^"[:space:]]*pattern[^"[:space:]]*\.mp3' |
  head -n5 | while read x; do
    sleep $(($RANDOM % 5 + 5))  ## to appear gentle and polite
    wget -nv "$x"
  done

grepШукаємо НЕ-космічні зв'язку в подвійних лапках , які містять ://і моє ім'я файлу pattern.


що тут РАНДОМ?
royki

Змінна оболонки, див. bashСторінку man. RANDOM Щоразу, коли цей параметр посилається, генерується випадкове ціле число між 0 і 32767.
нічна зміна
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.