Поддерживает ли wget или любой другой загрузчик http-файлов в Ubuntu подстановочные знаки?
Я хотел бы иметь возможность написать bash-скрипт для автоматического обновления моих расширений MediaWiki, и я думаю, что я буду использовать этот веб-сайт https://extdist.wmflabs.org/dist/extensions/ для этого. Но, как вы можете видеть, каждое имя файла tarball имеет случайную (или мне так кажется) комбинацию букв и цифр после последней черты (-). Так что я хотел бы, чтобы какой-то способ загрузки только файлов с таким названием extname-REL1_25*.tar.gz
где * - это место, куда должен входить подстановочный знак в имени, и extname
относится к расширению, которое я хочу имя.
2 ответа
Расширение Wget Brace
Используйте расширение скобки с wget для загрузки нескольких файлов в соответствии с шаблоном.
Пример:
wget -c https://extdist.wmflabs.org/dist/extensions/GoogleDocTag-REL1_{22-45203b7,23-249c6f2,24-3186a71,25-10e101f}.tar.gz
Необязательный -c
Флаг продолжает загрузку, если он был приостановлен или прерван с той же точки, где он был остановлен. -c
Эта опция полезна, когда вы загружаете большое количество файлов и хотите, чтобы все файлы загружались в пакетном режиме без перерывов.
wget скачать несколько файлов из списка
Пример:
lynx -dump "https://extdist.wmflabs.org/dist/skins/" | awk '/http/{print $2}' | uniq >> list.txt
wget -c -E -H -k -K -p -e robots=off -i ./list.txt
wget рекурсивные варианты принятия / отклонения
Рекурсивные варианты принятия / отклонения -Аклист -R rejlist --reject rejlist Укажите разделенные запятыми списки суффиксов или шаблонов имен файлов для принять или отклонить. Обратите внимание, что если любой из символов подстановки, *,?, [или], появится в элементе acclist или rejlist, это будет рассматривается как шаблон, а не суффикс. В этом случае вы необходимо заключить шаблон в кавычки, чтобы предотвратить вашу оболочку от расширения, как в -A "*.mp3" или -A '*.mp3'.
Пример:
lynx -dump "https://extdist.wmflabs.org/dist/skins/" | awk '/http/{print $2}' | uniq >> list.txt
wget -c -A "Vector*.tar.gz" -E -H -k -K -p -e robots=off -i ./list.txt
И то и другое -A
а также -R
Параметры загружают все файлы, а затем параметры принять и отклонить удаляют загруженные файлы, которые не соответствуют шаблону. Это ужасно неэффективно. Более быстрый способ сделать это - сопоставить шаблон с файлом list.txt, чтобы удалить все ненужные файлы из list.txt перед загрузкой.
Предположим, что вы хотите загрузить все файлы с https://extdist.wmflabs.org/dist/extensions/ которые удовлетворяют следующим условиям:
- версия 1.25
- только выбранные расширения MediaWiki
Предполагая, что вы уже создали файл list.txt, который содержит все ссылки в https://extdist.wmflabs.org/dist/extensions/, вы открываете list.txt в текстовом редакторе, который поддерживает сопоставление с образцом, и фильтруете содержимое list.txt для соответствия строк, имеющих строку 1_25
(что относится к версии 1.25), а затем отфильтруйте эти результаты, чтобы они соответствовали строкам с расширениями ~20 (число 20 не важно), которые вы хотите загрузить. Затем запишите результаты в новый файл с именем new-list.txt (имя файла new-list.txt не важно) и загрузите несколько файлов (в данном примере ~20), используя new-list.txt после wget. -i
возможность читать URL-адреса из локального или внешнего файла.
Дальнейшее усовершенствование этого метода будет заключаться в уменьшении количества сопоставляемых расширений путем фильтрации содержимого list.txt для сопоставления расширений, содержащих строки, которые соответствуют более чем одному искомому расширению. Например, если строка wiki
соответствует нескольким расширениям, которые вы ищете, вы можете отфильтровать содержимое list.txt для соответствия wiki
и сэкономить немного времени. В https://extdist.wmflabs.org/dist/extensions/ есть пять ссылок, которые содержат оба 1_25
а также wiki
и вы можете найти все пять ссылок с двумя совпадениями шаблонов.
Нет, это невозможно с подстановочными знаками. Но в этой ситуации wget будет работать с рекурсивной загрузкой - https://unix.stackexchange.com/questions/25340/download-recursively-with-wget