Como baixar vários arquivos de uma só vez de um site

0

Como posso baixar vários arquivos de uma só vez a partir da página da web. Por exemplo, eu quero baixar todos os plugins de uma só vez desta página .

O que eu fiz até agora é que toda vez que eu precisasse do URL do arquivo eu usaria o clique esquerdo em um arquivo e copy link address e então usaria wget e passaria pelo endereço. Este é um trabalho muito cansativo para fazer.

    
por newbie_girl 14.01.2017 / 22:15

3 respostas

1

você pode anaylse um pouco as htms retornadas de sua página de destino e jogar um pouco com bash utils. Isso deve funcionar:

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
    
por 14.01.2017 / 22:50
1

Como alternativa, você pode usar o wget (que não é tão portátil):

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)"$__p' | wget -i - --trust-server-names
  • O curl simplesmente recupera a página html que contém a lista de arquivos.
  • O comando sed encontra as URLs e as remove.
  • O wget faz o download da lista de arquivos.

Pode ser mais fácil de entender colocando-o em um script (um tanto reutilizável) chamado:

#!/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}.*\$__p\"\n   [test] is the option to show the files to be download"
else
    regex="s_^.*$2.*\$__p"
    if [[ "$3" == 'test' ]]; then
        echo "Using regex $regex:"
        regex="s_^.*$2.*\$_ _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

que pode ser chamado com (supondo que seja chamado dlist ):

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

A primeira opção é simplesmente a URL da lista de arquivos que você deseja: você também pode salvar o arquivo e especificá-lo na linha de comando.

Então, se você visualizar a fonte na página da lista de arquivos (ou a cópia que você baixou), navegue e encontre a lista de links que lhe dará a URL para procurar. Ao criar o regex, coloque a parte do URL que deseja com colchetes (começando antes do http) e substitua a parte que muda com todos os URLs. *

A segunda opção é a regex simplificada criada acima.

    
por 15.01.2017 / 06:12
0

Se você quiser fazer o download de todas as mesmas extensões de arquivos (mesmas regras globbing) em um diretório remoto, use:

 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/ 

Isso faz o download de todos os pacotes perl - *. rpm de um diretório.

    
por 09.07.2018 / 00:51