easydl - download de arquivos em forma de URLs

Publicado por Pedro Fernandes (última atualização em 24/09/2019)

[ Hits: 3.822 ]

Homepage: https://github.com/PedroF37

Download easydl

Download 1564270761.easydl (versão 2)




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.

  



Versões atualizadas deste script

Versão 2 - Enviado por Pedro Fernandes em 27/07/2019

Changelog: Versão 1.2

changelog:

1- Corrigido bloco de código que verifica se arquivo existe, se está vazio ou se não existe.
Agora testa direito se especificou um arquivo, se o arquivo existe ou não, e se existe
se está vazio ou não.

2- Corrigida a função que testa a conexao. Faltou declarar a variável "$QUALIDADE", sendo
assim ia dar erro. Simplifiquei, ao invés de declarar a variável testo por extenso;
variável local passou a ser variavel qualidade e se o resultado for maior que 10000,
então pergunta se quer saír ou continuar.

2.1- Também na mesma função, troquei o primeiro teste de conectividade,
para testar pelo ip ao invés do nome, para não perder tempo a tentar resolver
e também porque testei no meu pc quando estava sem internet e o resultado
não foi o esperado, (ficou um tempão travado a tentar resolver o nome, que nunca
iria resolver pois estava sem conexão.)

3- na função limite, se a taxa digitada não for: "^[0-9]+$"; o script avisa que
ou digitou errado ou não digitou nenhuma taxa e então irá prosseguir sem limitar
a velocidade.

4- Mudei o diretório de download para não dar conflito com o nome do script.
Passou a ser easydl-dir.

5- Na função usg, corrigi o texto onde dizia que dava para baixar mais do que
um url de uma vez no modo interativo. Mudei para avisar que no modo interativo
só pode baixar um url de cada vez.

Download 1564270761.easydl


Esconder código-fonte

#!/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
#
######################################################################

Scripts recomendados

Fazer o download de um website completo

Padronização de usuários em vários micros

Script para conversao de video compativel com PS3

Tecla / no vmware

Script para montagem/desmontagem de unidades do tipo pendrive.


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts