Baixar recursivamente links de um arquivo texto
Publicado por Perfil removido (última atualização em 04/07/2011)
[ Hits: 5.811 ]
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
Envia e-mail notificando configurações de uma máquina
MURFEX (MUltiple Rar File EXtractor)
Fazer o download de um website completo
Script de instalação do Hamachi
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Warcraft II Remastered no Linux? (4)
O programa assinador digital (5)









