Как заставить wget загружать рекурсивное объединение –прихват с –exclude-каталогами?

Я пытаюсь загрузить некоторые каталоги с сервера Apache, но мне нужно игнорировать некоторые каталоги с огромными файлами, которые мне не нужны

Структура сервера на сервере несколько напоминает это (упрощенное):

  • Как проверить запрос POST через HTTPS?
  • wget - Как загрузить рекурсивно и только определенные типы / расширения mime (т. е. только текст)
  • Запуск тысяч параллельных фоновых процессов в сценарии bash
  • Загрузите несколько файлов с помощью wget параллельно
  • Использование переменной даты с помощью wget -post-data
  • Предсказывать имя файла перед загрузкой с URL-адреса, в сценарии оболочки
  • somedir/ ├── atxt.txt ├── big_file.pdf ├── image.jpg └── tmp └── tempfile.txt 

    Итак, я хочу получить все файлы .txt и .jpg , но я НЕ хочу файлы .pdf или все, что находится в каталоге tmp .

    Я попытался использовать --exclude-directories вместе с --accept а затем с --reject , но в обеих попытках он продолжает загружать tmp и его содержимое.

    Это те команды, которые я пробовал:

     # with --reject wget -nH --cut-dirs=2 -r --reject=pdf --exclude-directories=tmp \ --no-parent http://<host>/pub/somedir/ # with --accept wget -nH --cut-dirs=2 -r --accept=txt,jpg --exclude-directories=tmp \ --no-parent http://<host>/pub/somedir/ 

    Есть ли способ сделать это?

    Как именно работают --exclude-directories ?

  • Отображение переноса wget более компактным способом (при сохранении функциональности обнаружения ошибок)
  • Необходимо выполнить javascript как работу cron ... возможно?
  • Как создать зеркало http?
  • Использование telnet для получения заголовка веб-сайта
  • Загрузить файл с фактическим именем wget
  • wget resume download from dropbox дает не может написать ошибку
  • 3 Solutions collect form web for “Как заставить wget загружать рекурсивное объединение –прихват с –exclude-каталогами?”

    Вместо того, чтобы попробовать и сделать это с помощью wget я бы предложил использовать более подходящий инструмент для загрузки сложных «наборов» файлов или фильтров.

    Вы можете использовать httrack для загрузки всех каталогов файлов (в основном, зеркалирования всего с сайта), или вы можете указать httrack фильтр вместе с определенными расширениями файлов, такими как файлы только для загрузки .pdf .

    Вы можете больше httrack о возможностях фильтра httrack которые вам нужно использовать, если вас интересует только скачивание файлов, которые были названы определенным образом.

    Вот несколько примеров возможностей подстановки:

    • *[file] или *[name] – любое имя файла или имя, например нет /,? а также ; персонажи
    • *[path] – любой путь (и имя файла), например, нет? а также ; персонажи
    • *[a,z,e,r,t,y] – любые буквы среди a, z, e, r, t, y
    • *[az] – любые буквы
    • *[0-9,a,z,e,r,t,y] – любые символы среди 0..9 и a, z, e, r, t, y

    пример

     $ httrack http://url.com/files/ -* +1_[az].doc -O /dir/to/output 

    Коммутаторы:

    • -* – удалить все из списка вещей, чтобы скачать
    • +1_[az].doc – загружать файлы с именем 1_a.doc, 1_b.doc и т. Д.
    • -O /dir/to/output – записывать результаты здесь

    У меня был аналогичный случай, когда я сделал эквивалент того, что будет для вас --exclude-directories '/tmp' и это сработало для меня.

    См. Также https://serverfault.com/questions/156045/how-to-download-with-wget-without-following-links-with-parameters/156057#156057 для более мощных параметров в последних wget (регулярных выражениях).

    У многих, включая меня, возникли проблемы с определением того, как использовать -X, и нашел ответ, который трудно запомнить (между годами между использованием).

    Трудно запомнить трюк записать это 🙂

     $ wget -X fo*o ... # does not work for directories $ wget -X */fo*o,*/*/fo*o,*/*/*/fo*o ... # works for directories $ wget -X \*/fo\*o/,\*/\*/fo\*o/,\*/\*/\*/fo\*o/ ... 

    ОТВЕТ:

    site hack wget -? / src / utils.c, чтобы использовать basename вместо текущего пути, также в командной строке используйте шаблон имени файла (просто 'fo * o', ничего больше). и обратите внимание на параметр FNM_PATHNAME, установленный в 0 (в противном случае он требует «/» для завершения хвоста соответствия). следующий патч против wget-1.12 там мой более простой способ, определяя? FNM_FLAGS, но это работает «отлично».

     --- utils.c.old 2016-09-13 07:49:11.000000000 -0400 +++ utils.c 2016-09-13 09:32:58.000000000 -0400 @@ -907,6 +907,9 @@ return *d1 == '\0' && (*d2 == '\0' || *d2 == '/'); } +/* for basename */ +#include <libgen.h> + /* Iterate through DIRLIST (which must be NULL-terminated), and return the first element that matches DIR, through wildcards or front comparison (as appropriate). */ @@ -921,18 +924,24 @@ { /* Remove leading '/' */ char *p = *x + (**x == '/'); + /* SITE HACK - only if patterned ignore leading dirs cmp as file */ + char sh_str[1024*16], *pp; + strcpy(sh_str,basename(dir)); + pp=sh_str; +#if 0 + printf("? %s == %s ?\n",p,pp); +#endif if (has_wildcards_p (p)) { - if (matcher (p, dir, FNM_PATHNAME) == 0) + if (matcher (p, pp, 0) == 0) break; } else { - if (subdir_p (p, dir)) + if (subdir_p (p, pp)) break; } } - return *x ? true : false; } 
    Linux и Unix - лучшая ОС в мире.