Как загрузить сразу несколько файлов с веб-сайта

Как насчет вырезать?

cut -c1-2,20-26 --output-delimiter ', ' test.dat
50, Mike
50, Roy
0
15.01.2017, 13:37
3 ответа

вы можете немного проанализировать возвращаемые htms целевой страницы и немного поиграть с утилитами bash. Это должно сработать:

for i in $(curl https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/  | grep net.sf.files | awk -F "=" '{print $2}' | jq '.[].full_path' | awk -F '"' '{printf("https://sourceforge.net/projects/geoserver/files/%s\n",$2)}') ; do curl -o $(echo $i | awk -F '/' '{print $NF}') -L ${i} ; done
1
28.01.2020, 02:25

В качестве альтернативы вы можно использовать wget (который не совсем такой переносимый):

curl -sS https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/ | sed -rn 's_^.*<a href="(https://sourceforge.net/projects/geoserver/files/.*/download)"$_\1_p' | wget -i - --trust-server-names
  • curl просто извлекает html-страницу, содержащую список файлов.
  • Команда sed находит URL-адреса и удаляет их.
  • Затем wget загружает список файлов.

Возможно, это будет легче понять, если поместить его в (несколько многократно используемый) сценарий с именем:

#!/bin/bash
if  [[ -z "$1" || -z "$2" || -n "$3" && "$3" != 'test' ]]; then
    echo "Usage:    dlist <htmlsource> <regexp> [test]\n    <htmlsource> can be a local file or url\n   <regex> is the inner part to \"s_^.*${regex}.*\$_\1_p\"\n   [test] is the option to show the files to be download"
else
    regex="s_^.*$2.*\$_\1_p"
    if [[ "$3" == 'test' ]]; then
        echo "Using regex $regex:"
        regex="s_^.*$2.*\$_ \1_p"
        if [[ "$1" == http* ]]; then
            curl -sS "$1" | sed -rn "$regex"
        else
            sed -rn "$regex" "$1"
        fi
    elif [[ "$1" == http* ]]; then
        curl -sS '$1' | sed -rn "$regex" | wget -i - --trust-server-names
    else
        sed -rn "$regex" "$1" | wget -i - --trust-server-names
    fi
fi

, который можно вызвать с помощью (при условии, что он называется dlist ):

dlist https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/ '<a href="(https://sourceforge.net/projects/geoserver/files/.*/download)"'

Первый вариант: просто URL-адрес списка файлов, который вы хотите: вы также можете сохранить файл и указать его в командной строке.

Затем, если вы просматриваете исходный код на веб-странице списка файлов (или загруженную копию), прокрутите и найдите список ссылок, которые дадут вам URL-адрес для поиска. При создании регулярного выражения заключите нужную часть URL-адреса в квадратные скобки (начиная непосредственно перед http) и замените часть, которая изменяется на все URL-адреса, на. *

Второй вариант - это упрощенное регулярное выражение, созданное выше.

1
28.01.2020, 02:25

Если вы хотите загрузить все те же расширения файлов (те же правила подстановки )в удаленном каталоге, вы можете использовать это:

 wget -r -l1 --no-parent --no-check-certificate  -Aperl-*.rpm https://mirror.cpsc.ucalgary.ca/mirror/fedora/linux/releases/28/Everything/x86_64/os/Packages/p/ 

Это загружает все пакеты perl -*.rpm из каталога.

4
28.01.2020, 02:25

Теги

Похожие вопросы