Baixando todos os arquivos de uma URL com o wget

Publicado por Davidson Rodrigues Paulo em 29/04/2006

[ Hits: 33.088 ]

Blog: http://davidsonpaulo.com/

 


Baixando todos os arquivos de uma URL com o wget



Hoje eu descobri uma paradinha que há muito eu tava querendo saber como se fazia. Fui dar uma procurada pra ver se havia sido lançada a versão 2.14 do FreeRock GNOME, e vi que havia uma versão de testes. Bem, antes uma versão de testes do FreeRock do que uma versão "estável" do Dropline.

Pois bem. Como é uma versão instável, eles ainda não lançaram o ISO, de forma que, para baixar todos os pacotes, eu teria que, teoricamente, entrar em algum dos mirrors do projeto e baixar os pacotes um a um. É lógico que eu não aceitei essa solução e tratei de procurar um jeito de fazer isso de forma automática.

Dando uma fuçada na página de manual do wget descobri um recurso interessante: o download de URL's contidas em um arquivo HTML. Assim ficou muito mais fácil.

Veja aqui um dos diretórios de onde eu precisava baixar todos arquivos com extensão .tgz (pacotes para Slackware). Agora, veja os procedimentos para baixar todos esses arquivos:

$ wget http://slackware.rol.ru/frg/frg-unstable/frgnome/bindings/
$ sed -n 's/^<IMG SRC.*<A/<A/;/.tgz/p' index.html > lista
$ wget -i lista -F \

> --base http://slackware.rol.ru/frg/frg-unstable/frgnome/bindings/

O primeiro comando faz o download da página HTML (index.html), que contém os links para os arquivos que eu quero baixar.

O segundo comando faz uso do sed para retirar do documento as tags com as imagens (s/^<IMG SRC.*<A/<A/) e mostrar apenas as linhas que tivessem links para os arquivos de extensão .tgz (/.tgz/p).

Por fim, o terceiro comando usa o arquivo lista como lista de URL's em formato HTML (-F) para o wget baixar (-i lista). O parâmetro --base serve para especificar o prefixo das URL's, que deverá ser sempre o mesmo endereço de onde obtivemos o arquivo index.html (nesse caso, http://slackware.rol.ru/frg/frg-unstable/frgnome/bindings/ - não se esqueça de colocar a "/" no final do endereço, ou então não funcionará).

Voilà!

Abraços,

Davidson Paulo

Outras dicas deste autor

Recuperando base de dados do RPM

Desfazendo atualizações de software no Red Hat/Fedora/CentOS

Como desmontar um compartilhamento NFS travado

Usando vários mirrors no slackpkg

Patch de 4 linhas para acelerar o Linux (Fedora 14)

Leitura recomendada

Como renomear arquivos de letras maiúsculas para minúsculas

Leitor de arquivos ePub

Múltiplas expressões no SED

Limitando o alcance do SED por números de linha

Obtendo a cotação do Bitcoin com SED

  

Comentários
[1] Comentário enviado por in54no em 29/04/2006 - 21:49h

opa, boa dica kra...
eu uso o 2.12 (freerock) e para o 2.14 ele atualiza por "cima", apenas dando upgradepkg, ou seria melhor remover o 2.12 antes? o meu 2.12 nao inicia mais corretamente :( valew.
teh mais, fica com Deus!

[2] Comentário enviado por albertoivo em 30/04/2006 - 00:20h

nao conseguir fazer aqui..

[3] Comentário enviado por davidsonpaulo em 30/04/2006 - 08:30h

in54no,

O upgradepkg remove os pacotes já instalados com o removepkg antes de instalar as novas versões. Para atualizar o meu FreeRock eu apenas baixei todos os pacotes e, no diretório base onde eles estavam, dei o comando:

# for PKG in `find -name '*.tgz'` ; do upgradepkg --install-new $PKG ; done

albertoivo,

O que foi que de errado? Apenas a título de informação, as duas últimas linhas são um comando só. Aquela ">" não faz parte do comando.

Abraços

[4] Comentário enviado por removido em 30/04/2006 - 12:44h

Uso muito esse scriptzinho aí (autoria do Carlos 'Kurumin' Morimoto). Vc salva como executável numa pasta qualquer (chmod +x scriptzinho) e despois executa "./scriptzinho".

A vantagem é que o danado vai baixar o arquivo, mesmo que o site esteja instável, com muitas saídas do ar. E mesmo que interrompa o download pra aliviar a banda (use CTRL+C pra parar) quando executar o scriptzinho novamente tudo vai recomeçar de onde parou.

Boa sorte!
_____________________________________________

#!/bin/sh

continuar=1
parar=0
while [ "$parar" -lt "$continuar" ]
do

wget -c http://www.endereço_completo.com.br/arquivo.tar.gz
done

[5] Comentário enviado por gabriel.bezerra em 01/05/2006 - 00:32h

no wget há um parâmetro que o deixa recursivo, ou seja, ele baixa tudo que uma pagina endereça, e suas subpáginas também. eu só não lembro qual é.

[6] Comentário enviado por davidsonpaulo em 01/05/2006 - 00:51h

toufeliz,

O parâmetro é -R. Ele serve pra baixar recursivamente todos os arquivos de uma URL. As desvantagens são que, além de não poder especificar qual tipo de arquivo queremos baixar, ele baixo o conteúdo do site inteiro, e não apenas da URL digitada.

[7] Comentário enviado por rbn_jesus em 17/08/2007 - 09:47h

Está tua dica mereceu ir para meus favoritos!!!!!

[8] Comentário enviado por ZiroCool em 01/08/2009 - 15:26h

davidsonpaulo,

Na verdade o -R é a lista de extensões reijetadas pelo modo recursivo.

A sintaxe é esse aqui:

wget -r -A bz2 URL

No caso o -r põe o wget em modo recursivo, e o -A especifica as extensões aceitas para o download.

Uma mão na roda... ;)



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts