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.