Baixar recursivamente links de um arquivo texto
Publicado por Perfil removido (última atualização em 04/07/2011)
[ Hits: 5.661 ]
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
verificar acessos indevidos automaticamente squid
Inversor de links de download (ou qualquer outra String)
Multiplos gerenciadores nome do seu pacote
Previsão do tempo em cores no terminal
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Comandos no NixOS não funcionam (1)
De volta para o futuro - ou melhor, para o presente (24)