Зміна імен файлів ПЕРЕД тим, як wget завантажує їх (не перейменовуючи локальні версії)


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, який потім спробує завантажити перший список файлів, але трохи змінити букви, щоб завантажити другий список. Чи можна це зробити?

Відповіді:


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

Кредити:
Я беру натхнення це відповідь .


Мені це подобається, і, як плюс, ви в кінцевому підсумку отримуєте зручний індекс ваших файлів
Philip Arnott

Попередження, що це далеко, щоб бути досконалим ... Є зокрема випадки, якими не керує скрипт (як видно з нотатки натхнення ). Крім того, ви можете змінити > My_List.txt с | sort -u > My_List.txt у випадку, якщо ваші файли викликаються з більш ніж однієї сторінки сайту: інакше, в цьому випадку ви завантажуєте їх більше одного разу, втрачаючи час, ресурси ... Це був ескіз більше, ніж відповідь :)
Hastur

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'

N.B. більшість з цих довгих варіантів мають короткі альтернативи - див. Я використовував довгу форму для ясності.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.