Baixar recursivamente links de um arquivo texto
Publicado por Perfil removido (última atualização em 04/07/2011)
[ Hits: 5.640 ]
Digamos que você queira/necessite baixar alguns MB/GB/TB da internet, por exemplo, para uma atualização, ou para a instalação de um novo programa usando uma conexão não muito apropriada para issso ou seja: lenta como a discada. Claro que isso vai demorar muito tempo, mais muito tempo mesmo. E pode ser que você não disponha de tempo o suficiente para ficar esperando o término da operação na frente do micro...
Como muitas outras pessoas (eu por exemplo), que ainda usam este tipo de conexão você aproveita a madrugada para baixar este tipo de arquivo ou um horário qualquer em que você não está a frente do micro em que ele normalmente é utilizado para outras tarefas e a já escassa banda disponível é essencial para a realização da mesma. E além do tempo gasto temos o famigerado consumo de energia elétrica.
Como exemplo inicial vou mostrar como baixar um pacote via apt-get (gerenciador de pacotes do Debian) usando um dos meus métodos.
NOTA: Digite tudo numa linha só caso queira usar as dicas em uma linha de comando. Eu usei esta formatação apenas para melhorar a leitura do código.
Primeiramente, o método que acho o mais correto de todos para instalar um pacote é você tentar baixar o pacote inteiro após verificar suas dependências. Claro, se todas estiverem resolvidas você poderá instala-las sem susto usando a dica a seguir:
while : ; do
sudo apt-get -d -y install pacote-foo &&
sudo halt
done
O parâmetro -d informa ao apt-get que ele deverá apenas baixar o pacote (armazena-lo no cache) para uma calma e posterior instalação. Note que fazemos uso de um loop infinito ( trecho while : ; do e done ) que só encerra quando o pacote for totalmente baixado, (graças ao &&), para então a maquina ser desligada ( halt ), caso não necessitarmos mais utiliza-la.
Veja que podemos usar o mesmo raciocínio para baixar qualquer arquivo usando o gerenciador de downloads wget que até hoje não senti sua falta em nenhuma distribuição GNU/Linux.
while : ; do
wget -c http://www.site_exemplo.com/exemplo.rar &&
sudo halt
done
Ou ainda usar algum tipo de sinalização do termino do download, como por exemplo tocar uma musica com um player como o mplayer.
while : ; do
wget -c http://www.site_exemplo.com/exemplo.rar &&
mplayer musica.ogg
done
Me lembro de uma ocasião em que necessitei utilizar um outro gerenciador de download que "deixa arquivos .part" enquanto vai baixando o arquivo principal. Então usei algo assim:
while [ -e ./*.part ] ; do
echo -en " \rBaixando o arquivo..." && sleep 1s
done &&
sudo halt
E felizmente funcionou corretamente!!!
Enfim, as opções são muitas, uma vez que esse mesmo raciocínio pode ser usado para outros casos em que gastaríamos muito tempo esperando o termino de um processo e/ou para economizar energia necessitaríamos desligar o sistema ao termino do mesmo.
E como, neste tipo de caso, estamos impossibilitados de fazê-lo manualmente por estarmos no trabalho, escola ou talvez dormindo ou ainda nos divertindo com uma outra ocupação qualquer, este tipo de situação "adversa" torna a coisa muito difícil, senão impossível de fazê-lo de forma correta e blablablalbla
Estas são umas das principais soluções que encontrei para este tipo de problema e que me são de uma utilidade enorme, por serem muito simples e portanto facilmente assimiladas pela minha memória e ainda, extremamente convenientes principalmente por poder usa-las na linha de comando em qualquer sistema GNU/Linux sem me preocupar muito com versões e aptidões de programas gerenciadores de downloads.
Segue um script que aproveita estas idéias. Ele baixa recursivamente links de um arquivo texto.
Boa sorte.
#!/bin/bash # Pega uma lista de links e os baixa um por um. # Importante # - Coloque um unico link por linha na lista. # - Comentarios e linhas vazias não serão processados. # - Coloque na ultima linha da lista de links para # baixar a expressão exata THE END caso contrário # o loop não encerará. # # # Version 0.5a # Author Paulo Riceli Dias Lelis (./.ronin) # License GPLv2.0 # see more in http://pauloriceli.blogspot.com PARA_BAIXAR="$PWD/pega.para_baixar.txt" BAIXADOS="$PWD/pega.baixados.txt" E_LST='THE END' APP_NM='PEGA' if [ ! -e $BAIXADOS ]; then touch $BAIXADOS fi if [ ! -e $PARA_BAIXAR ]; then echo >> $E_LST $PARA_BAIXAR fi while : ; do IFS_O=$IFS IFS=$'\n' for i in $( grep -v '#' "${PARA_BAIXAR}" | uniq | grep -v '^$' ); do JA_FOI_BAIXADO=$( grep $i "${BAIXADOS}" ) echo -e "${APP_NM}:\n Baixando \n $i...\n" if [ ${#JA_FOI_BAIXADO} -eq 0 -a $i != $E_LST ]; then wget -c $i && echo $i >> "${BAIXADOS}" else echo -e "${APP_NM} :\n $i \n já foi baixado anteriormente. \n" fi done if [ $i == $E_LST ]; then IFS=$IFS_O break fi done exit
Balanceamento e Redundância utilizando 2 Links Speedy (ip fixo)
KDE 4.1.1 no Slackware Linux 12.1
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta