1

У меня есть файловая система веб-сайта, где каждый файл имеет две копии, краткую копию и большую копию с разными именами. Например, файл большой копии может быть pages/info/GK2grkG23r_lg.html, в то время как в сводной копии предварительное расширение букв изменяется как pages/info/GK2grkG23r_sh.html. Я пытаюсь запустить wget в файловой системе, но все ссылки по дизайну указывают на маленькую копию для экономии ресурсов, и мне нужны большие копии. Таким образом, при запуске wget на страницах можно загрузить все сводные копии:

pages/info/GK2grkG23r_sh.html
pages/info/2Yp58xr4Ir_sh.html
pages/info/Lmk2nIj23r_sh.html
pages/info/M23Dka6D4r_sh.html

Я хотел бы изменить имена файлов, которые wget собирается загрузить:

pages/info/GK2grkG23r_lg.html
pages/info/2Yp58xr4Ir_lg.html
pages/info/Lmk2nIj23r_lg.html
pages/info/M23Dka6D4r_lg.html

Хотя wget найдет файлы, они будут указывать на первый набор.

Чтобы было ясно, я не хочу загружать файлы с первым набором имен выше, а затем переименовывать их. Я хочу запустить wget, который затем попытается загрузить первый список файлов, но слегка изменить буквы, чтобы загрузить второй список. Может ли wget сделать это?

2 ответа2

1

Вы можете попробовать с обходным путем.

Вехи:

  1. Скачайте полный список файлов и сохраните его в файле
  2. Изменить последнюю часть имен файлов
  3. Загружайте только файлы с измененным именем.

Вам нужен файл filter.awk похожий на этот

/^--.*--  http:\/\/.*[^\/]$/ { u=$3; }
/^Length: [[:digit:]]+/ { print u; }

Шаг за шагом:

wget -r -np --spider http://yourhost | awk -f filter.awk  > My_List.txt
sed -i s/_sh.html/_lg.html/g My_List.txt
wget -x -i My_List.txt

Кредиты:
Я беру вдохновение из этого ответа.

0

Сначала получите индексный файл:

wget -O index.html "$URI"

Затем перепишите в нем URL:

sed -i '/_sh\(\.html\)/_lg\1/g' index.html

(Я использовал sed, но вы можете предпочесть, например, подход на основе XSLT. Сделайте ваш выбор.)

Теперь скажите wget захватить все pages/info/* , используя измененный индексный файл и его исходное местоположение в качестве исходного базового URI:

wget --recursive --level=1 \
    --input-file=index.html --force-html --base="$URI" \
    --accept-regex 'pages/info/.*_lg\.html'

NB. Большинство из этих длинных опций имеют короткие альтернативы - см. Справочную страницу. Я использовал длинную форму для ясности.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .