Use grep com ele:
wget url -rqO - | grep -oE '[a-z]+://[^[:space:]"]+'
Portanto, wget tem a capacidade de baixar recursivamente arquivos, no entanto, ele faz um arquivo de cada vez.
Gostaria de passar um URL de diretório e cada URL encontrado na recursão dele para gerar um processo de download.
Uma maneira que eu estava pensando em fazer isso é usar wget para imprimir os URLs que encontra e, em seguida, alimentar essas URLs em instâncias separadas de wget (via wget URL_1 & , wget URL_2 & etc).
Alguma idéia?
Use grep com ele:
wget url -rqO - | grep -oE '[a-z]+://[^[:space:]"]+'
Uma maneira de resolver esse problema é coletar todos os links em um arquivo de texto simples e fazer o seguinte: -
while read line; do
echo "Downloading ${line}"
wget $line &
done < $1
Salve este arquivo como script.sh e torne-o executável e execute-o como
$ ./script.sh
Uma maneira melhor de resolver permanentemente este problema seria reescrever o wget para ser inerentemente paralelo.
No meu caso, funcionou por encadeamento dois wget s:
$ wget -O - -o /dev/null http://site.to.get.urls.from | grep -o 'some_regex' | wget -i -
O primeiro wget produzirá uma lista de URLs com arquivos, que é usada como entrada "arquivo" para o segundo wget .
Note que esta é uma versão simplificada para mostrar a técnica por trás dela. O pipe entre o comando grep e o segundo wget pode, de fato, ser combinado com muito mais comandos canalizados como sed , awk ou cut (especialmente se o código-fonte HTML for um pouco mais complexo que o usual e, portanto, a análise é mais difícil).
Isso é lida : certifique-se sempre de chamar primeiro o wget interno para verificar, em stdout , se suas expressões regulares estão funcionando corretamente.