easydl - download de arquivos em forma de URLs
Usa o wget para fazer os downloads. Pode baixar um único URL especificado na linha de comando ou uma lista inteira que tenha sido previamente criada em um arquivo. Nesse caso, a lista terá que conter uma URL por linha.
O script cria um diretório no HOME do usuário só para os downloads.
As opções do wget que o script usa são:
--input-file=
--continue
--limit=rate
O script conta com uma função que está toda comentada, pois é opcional, que testa o ping e se o campo "rtt" no valor "max" for maior que 10ms, o usuário tem a opção de sair do script. Este é o valor que considero aceitável para a minha conexão. Como é subjetivo e opcional, a função está toda comentada.
O script cria um diretório no HOME do usuário só para os downloads.
As opções do wget que o script usa são:
--input-file=
--continue
--limit=rate
O script conta com uma função que está toda comentada, pois é opcional, que testa o ping e se o campo "rtt" no valor "max" for maior que 10ms, o usuário tem a opção de sair do script. Este é o valor que considero aceitável para a minha conexão. Como é subjetivo e opcional, a função está toda comentada.
Descrição
Usa o wget para fazer os downloads. Pode baixar um único URL especificado na linha de comando ou uma lista inteira que tenha sido previamente criada em um arquivo. Nesse caso, a lista terá que conter uma URL por linha.
O script cria um diretório no HOME do usuário só para os downloads.
As opções do wget que o script usa são:
--input-file=
--continue
--limit=rate
O script conta com uma função que está toda comentada, pois é opcional, que testa o ping e se o campo "rtt" no valor "max" for maior que 10ms, o usuário tem a opção de sair do script. Este é o valor que considero aceitável para a minha conexão. Como é subjetivo e opcional, a função está toda comentada.
O script cria um diretório no HOME do usuário só para os downloads.
As opções do wget que o script usa são:
--input-file=
--continue
--limit=rate
O script conta com uma função que está toda comentada, pois é opcional, que testa o ping e se o campo "rtt" no valor "max" for maior que 10ms, o usuário tem a opção de sair do script. Este é o valor que considero aceitável para a minha conexão. Como é subjetivo e opcional, a função está toda comentada.
Versões atualizadas deste script
#!/bin/bash
#
######################################################################
#
# Título: easydl
#
# Autor: Pedro Fernandes
#
# Email: pedrobfernandes32@protonmail.com
#
# Descrição: Script que usa o wget para fazer os downloads.
# O script pode baixar ou um único url especificado na linha de comando ou
# pode baixar uma lista inteira que tenha sido previamente criada em um arquivo.
# Nesse caso, a lista terá que conter uma url por linha.
# O script cria um diretório no home do usuário só para os downloads.
# As opções do wget que o script usa são:
# --input-file=; --continue; e --limit=rate.
# O script conta com uma função que está toda comentada, pois é opcional,
# que testa o ping e se o campo "rtt" no valor "max" for maior que 10ms, o usuário
# tem a opção de saír do script. Este é o valor que considero aceitável para a minha
# conexão. Como é subjetivo e opcional, a função está toda comentada.
#
######################################################################
#
######################################################################
#
# Constantes
#
PROGRAMA="$(basename "$0")"
DIRETORIO=/home/$USER/easydld
TAXA=" "
#
######################################################################
#
######################################################################
#
#Funções
#
######################################################################
#
# Ajuda
usg () {
clear
echo "
PROGRAMA: uso: $PROGRAMA [ -f (arquivo) | -i (interativo) | -h (ajuda) ]
Descrição:
Script gerenciador de downloads que usa o programa wget, para baixar.
O script permite baixar uma única url, ou várias especificadas no prompt.
Este modo é acionado pelo parâmetro [ -i (interativo) ].
Alternativamente, o script permite que se indique um arquivo previamente
criado contendo várias urls, sendo que tem que ser uma por linha.
Este modo é acionado pelo parâmetro [ -f arquivo ], onde arquivo é o nome
que você deu ao arquivo criado.
O modo [ -h (ajuda) ], simplesmente mostra este mesmo texto.
O script respeita toda a sintaxe do programa wget, então, todas as url passadas
ou como parâmetro ou no arquivo seguem o comportamento do mesmo.
Por exemplo, se quiser baixar uma iso de uma distribuição, então garanta que não
especificou a url de forma a baixar a página html ao invés da iso. Independente se der
para baixar seja o que for, o script (wget) irá baixar.
As opções do wget que são usadas neste script, são, dependendo da sua escolha:
\"--input-file=\"; \"--continue\" e \"--limit-rate\".
Para mais informações e opções para modificar o script a seu gosto: man wget.
"
exit
}
#
# Função interativo
inter () {
clear
cd /home/$USER/easydld
read -p "Digite a url do arquivo a baixar: > " url
if [[ -z "$TAXA" ]]; then
wget --continue $url
else
wget --continue --limit-rate=$TAXA $url
fi
echo -e "\nTerminado.
O seu download encotra-se na pasta easydld no home do seu usuário."
exit
}
#
# Função arquivo
loop_arq () {
clear
cp $arquivo /home/$USER/easydl &>/dev/null
cd /home/$USER/easydld
if [[ -z "$TAXA" ]]; then
wget --continue --input-file=$arquivo
else
wget --continue --limit-rate=$TAXA --input-file=$arquivo
fi
echo -e "\nTerminado
Os seus downloads encontram-se na pasta easydld no home do seu usuário."
rm $arquivo
exit
}
#
# Funão taxa
limite () {
clear
read -p "Deseja limitar a taxa de download? [1] sim; [2] não: > "
if [[ "$REPLY" =~ ^[1-2]$ ]]; then
if [[ "$REPLY" == 1 ]]; then
read -p "Digite a taxa em kbytes: > " rate
TAXA="$rate"
else
TAXA=
fi
else
echo -e "\nDigitou errado. Saíndo do script." >&2
exit 1
fi
return
}
#
# Função para testar conectividade.
# Na minha casa considero uma conexão boa se o rtt no valor max está até
# no máximo em 10ms.
# Deixo a função toda comentado pois é subjetiva a cada caso.
# Querendo usar é so descomentar e modifcar para o seu caso.
#conexao () {
# clear
# if ! ping -c1 www.google.com &>/dev/null ; then
# echo -e "\nParece estar sem conexão. Saíndo."
# sleep 2
# exit
# fi
#
# testando qualidade
# echo -e "\nAguarde enquanto testamos a qualidade da conexão. Pode demorar um pouco......."
# atual="$(ping -c5 www.google.com | grep 'rtt' | cut -d "=" -f 2 | cut -d "/" -f 3 | tr -d [:punct:])"
# if (( "$atual" > "$QUALIDADE" )); then
# echo -e "\nParece que a sua conexão está um pouco lenta.
#Dependendo do que quiser baixar, pode demorar mais do que o habitual.
#Deseja continuar assim mesmo, ou deseja saír e tentar mais tarde?"
# read -p "[1] para continuar; [2] para saír."
# if [[ "$REPLY" =~ ^[1-2] ]]; then
# if [[ "$REPLY" == 1 ]]; then
# echo -e "\nContinuando......"
# sleep 2
# return
# else
# echo -e "\nSaíndo do script......"
# sleep 2
# exit
# fi
# else
# echo -e "\nDigitou errado. Vamos saír do script......" >&2
# sleep 2
# exit 1
# fi
# else
# echo -e "\nConexão parece estar normal. Continuando......"
# sleep 2
# return
# fi
#}
#
######################################################################
#
# Fim de funções
#
######################################################################
#
# Verificações
#
######################################################################
#
# Não quero root
if [[ "$(id -u)" -eq 0 ]]; then
echo -e "\nErro. Não pode ser root" >&2
exit 1
fi
#
# O seguro morreu de velho
if [[ -z "$(which wget)" ]]; then
echo -e "\nTem que ter o wget instalado. Saíndo." >&2
sleep 2
exit 1
fi
#
# Criando diretório se ainda não existe
if [[ ! -d "$DIRETORIO" ]]; then
mkdir /home/$USER/easydld
fi
#
######################################################################
#
# Fim de verificações
#
######################################################################
#
# Começa aqui
#
######################################################################
#
# Tem que ter argumento
#
if [[ -n "$1" ]]; then
case "$1" in
-f) shift
arquivo="$1"
;;
-i) interativo=1
;;
-h) usg
;;
*) echo "Erro. Opção inválida." >&2
usg
exit 1
;;
esac
else
echo -e "Erro. Tem que ter um parâmetro." >&2
sleep 2
usg
exit 1
fi
#
# Parâmetro interativo
if [[ -n "$interativo" ]]; then
#conexao
limite
inter
exit
fi
#
# Tratando do parâmetro [ -f arquivo ]
if [[ -z "$arquivo" ]]; then
echo -e "\nErro. Tem que especificar o nome do arquivo quando usa o parâmetro [ -f ]." >&2
sleep 2
usg
exit 1
elif [[ ! -s "$arquivo" ]]; then
echo -e "\nErro. Arquivo encontrado, mas está vazio." >&2
sleep 2
usg
exit 1
elif [[ -n "$arquivo" ]]; then
if [[ ! -e "$arquivo" ]]; then
echo -e "\nErro. Arquivo especificado não existe." >&2
sleep 2
exit 1
else
#conexao
limite
loop_arq
exit
fi
fi
#
######################################################################
#
exit
#
######################################################################