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.