Baixar recursivamente links de um arquivo texto
Publicado por Perfil removido (última atualização em 04/07/2011)
[ Hits: 5.579 ]
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
pdfck - gerenciador de PDF para o console
Instala/Remove/Atualiza com APT [gerenciador_apt.sh]
Calculadora para eletrodomésticos
Agora temos uma assistente virtual no fórum!!! (247)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
Agora temos uma assistente virtual no fórum!!! (247)
iso de sistema 32 bit em atividade (12)
Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel... (27)