wget с подстановочными знаками в загрузках http

Если vi Вы имеете в виду оригинал vi, тот был скорее поврежден, имел тонны "недокументированных команд" (я все еще нежно помню длинный документ, дающий недокументированное и промежуточное (или больше) поврежденный, особенный, полностью неправильный, и иногда спасительный, команды). Дополнительный язык (языки) для vim много мощного Мура. Только посмотрите на значение имени: *V*i *Im*proved, vim сам undestands как перенос viотметьте к будущему. Если Вы не входите в укромные уголки и трещины, оба должны работать то же, с vim имение преимущество продолжающейся разработки.

57
03.03.2014, 23:51
4 ответа

Думаю, эти переключатели сделают то, что вы хотите с помощью 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/
64
27.01.2020, 19:33

Есть веская причина, по которой это не может работать напрямую с HTTP, и она заключается в том, что URL не является путем к файлу, хотя использование / в качестве разделителя может сделать его похожим на таковой, и они иногда соответствуют. 1

Традиционно (или исторически) веб-серверы часто делают зеркальную иерархию каталогов (для некоторых - например, Apache - это является неотъемлемой частью) и даже обеспечивают индексы каталогов, как в файловой системе. Однако протокол HTTP не требует этого.

Это важно, потому что если вы хотите применить glob, скажем, ко всему, что является подпунктом http://foo/bar/, если сервер не предоставит вам какой-либо механизм для обеспечения этого (например, вышеупомянутый индекс), вам не к чему будет применить glob to. Там нет файловой системы для поиска. Например, если вы знаете, что есть страницы 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. Конечно, FTP URL - это тоже URL. Однако, хотя я не очень много знаю о протоколе FTP, я бы предположил, основываясь на его природе, что он может иметь форму, позволяющую прозрачное глоббирование.

2. Это означает, что может существовать правильный URL http://foo/bar/alt/whatever/stuff/, который не будет включен, потому что он никоим образом не связан ни с чем из набора вещей, связанных с http://foo/bar/index.html. В отличие от файловых систем, веб-серверы не обязаны делать расположение своего содержимого прозрачным, равно как и не обязаны делать это интуитивно очевидным способом.

15
27.01.2020, 19:33

Es posible que la solución ' -Un patrón' anterior no funcione con algunas páginas web. Este es mi trabajo -alrededor, con un wget doble:

  1. wgetla página
  2. greppara patrón
  3. wgetel archivo (s)

Ejemplo :supongamos que es una página de podcast de noticias y quiero 5 archivos mp3 de la parte superior de la página:

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

El grepestá buscando enlaces de espacio doble -citado sin -que contengan ://y mi nombre de archivo pattern.

1
27.01.2020, 19:33

Используйте опцию -nd для сохранения всех файлов в текущем каталоге без иерархии каталогов, например:

wget -r -nd --no-parent -A 'bar.*.tar.gz' http://url/dir/
1
06.02.2020, 20:55

Теги

Похожие вопросы