Изменение имен файлов ДО того, как wget загрузит их (не переименовывая локальные версии)

Изменение имен файлов ДО того, как wget загрузит их (не переименовывая локальные версии)

У меня есть файловая система веб-сайта, в которой каждый файл имеет две копии, сводную копию и большую копию, с разными именами. Например, большой файл копии может быть страницы/информация/GK2grkG23r_lg.htmlв то время как в сводной копии буквы предварительного расширения изменены следующим образом:страницы/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 сделать это?

решение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

Источники:
Я черпаю вдохновение изэтот ответ.

решение2

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

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 большинство этих длинных опций имеют короткие альтернативы - см. man-страницу. Я использовал длинную форму для ясности.

Связанный контент