Я хотел бы иметь возможность написать bash-скрипт для автоматического обновления моих расширений MediaWiki и думаю, что воспользуюсь этим сайтом.https://extdist.wmflabs.org/dist/extensions/сделать это. Но как вы можете видеть, каждое имя файла tarball имеет случайную (или мне так кажется) комбинацию букв и цифр после последнего дефиса (-). Поэтому мне бы хотелось каким-то образом загружать только файлы с таким именем, extname-REL1_25*.tar.gz
где * — это место, где в имени будет подстановочный знак, и extname
ссылается на имя нужного мне расширения.
решение1
расширение скобок wget
Используйте раскрытие фигурных скобок с 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 рекурсивные параметры принятия/отклонения
Рекурсивные параметры принятия/отклонения -A acclist --принять acclist -R список_записей --reject список_записей Укажите списки суффиксов или шаблонов имен файлов, разделенные запятыми. принять или отклонить. Обратите внимание, что если какой-либо из подстановочных знаков, *, ?, [ или ], появляются в элементе acclist или rejlist, это будет рассматривается как шаблон, а не как суффикс. В этом случае вы необходимо заключить шаблон в кавычки, чтобы предотвратить вашу оболочку от его расширения, как в-А "*.mp3"или-А '*.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 после -i
опции wget для чтения URL из локального или внешнего файла.
Дальнейшее улучшение этого метода будет заключаться в уменьшении количества расширений для сопоставления путем фильтрации содержимого list.txt для сопоставления расширений, содержащих строки, которые соответствуют более чем одному расширению, которое вы ищете. Например, если строка wiki
соответствует нескольким расширениям, которые вы ищете, вы можете отфильтровать содержимое list.txt для сопоставления wiki
и сэкономить немного времени. Вhttps://extdist.wmflabs.org/dist/extensions/есть пять ссылок, которые содержат 1_25
и , wiki
и вы можете найти все пять ссылок с двумя совпадениями шаблона.
решение2
Нет, это невозможно с подстановочными знаками. Но в этой ситуации wget будет работать с рекурсивной загрузкой -https://unix.stackexchange.com/questions/25340/download-recursively-with-wget