В wget есть такая опция, -np
которая отключает получение файлов из любого родительского каталога. Мне нужно что-то похожее, но немного более гибкое. Рассматривать:
www.foo.com/bar1/bar2/bar3/index.html
Я хотел бы получить все, но не «выше» (в древовидной иерархии), чем bar2
(!). Так bar2
что тоже надо извлекать но не надо bar1
.
Есть ли способ сделать wget более избирательным?
Предыстория: я пытаюсь отразить веб-сайт с похожей логической структурой - отправная точка, затем вверх, затем вниз. Если есть другой инструмент wget
, который лучше подходит для такого макета, пожалуйста, дайте мне знать.
Обновить
Или вместо указания возможной глубины, может быть что-то вроде «нет родителей, если они не соответствуют тому или иному URL».
Обновление 2
На сервере есть какая-то структура, верно? Вы можете визуализировать это как дерево. Поэтому обычно с "--no-parent" вы начинаете с некоторой точки A и идете только вниз.
Мое желание - это способность идти вверх - выражается, говоря, что ему разрешено идти вверх по X узлам или (что эквивалентно 100%), что ему разрешено подниматься до узла B (где расстояние BA = X).
Во всех случаях правила для снижения остаются такими, как были определены пользователями (для примеров - понижаются только по уровням Y).
Как хранить это? На самом деле это не вопрос на самом деле - wget
по умолчанию воссоздает структуру сервера, здесь нечего бояться или нет необходимости что-либо исправлять. Итак, в двух словах - как обычно.
Обновление 3
Структура каталогов ниже - давайте предположим, что в каждом каталоге есть только один файл, в R - R.html и так далее. Это, конечно, упрощено, потому что вы можете иметь более одной страницы.
R
/ \
B G
/ \
C F
/ \
A D
/
E
A (A.html) - моя отправная точка, X = 2 (поэтому B - самый верхний узел уровня, который я хотел бы получить). В этом конкретном примере это означает выборку всех страниц, кроме R.html и G.html. A.html называется «отправной точкой», потому что я должен начать с нее, а не с B.
Обновление 4
Именование используется из Обновления 3.
ВАЖНЫЕ ВАРИАНТЫ www.foo.com/B/C/A/A.html
Вопрос в том, какие есть варианты получить все страницы из каталога B и ниже (зная, что вам нужно начинать с A.html).
bar2
но нетbar1
? Гдеbar2
будет жить? Что, если у двух или более папок, которые вы не хотите, есть поддиректории с одинаковыми именами, их содержимое должно быть объединено? Почти наверняка проще просто взять весь этот чертов сайт и затем обрезать / переместить вещи по своему желанию.bar2
каталог и все его содержимое. Если это не так, пожалуйста, уточните.Ответы:
Я не пробовал, но использование -I и -X может дать вам то, что вы хотите. Мои первые попытки были бы по линии
Объяснение вариантов:
источник
Вам нужно добавить окончательный / к URL, иначе вы не получите то, что вы хотите.
Если вы хотите получить весь контент по адресу www.myhostname.com/somedirectory, то синтаксис должен выглядеть следующим образом:
Попробуй без конца / и посмотри что получится. Затем попробуйте с помощью /.
источник
Я думаю, что правильный ответ здесь
--no-parent
вариант:источник
Может быть, я что-то упустил, но если это то, что вы хотите, то
работает для меня (на вашем примере). Конечно, с этими опциями вы получите всю структуру каталогов выше этой, начиная
www.foo.com
с нуля. Если вы просто хотитеbar2
на верхнем уровне, то сделайте-nH
избавляется отwww.foo.com
и--cut-dirs=1
избавляетсяbar1
, так что вы получитеbar2
и его подкаталоги будут загружены в текущий каталог. Для получения дополнительной информации см.man wget
, Который является вполне читабельным и имеет примеры.источник
np
), но я ищу общее решение, когда верхний уровень находится выше начальной точки.B
(согласно вашему примеру), а скорееA
? Если так, то почему? Это потому, что вы хотите автоматизировать какой-то скрипт или по какой-то другой причине? Я также не уверен, что вы подразумеваете под Х = 2. Означает ли это уровень 2? Если вы пытаетесь получить каталоги дальше вниз по дереву, я не уверен, как вы отличаетесьB
от нихG
.