Eu tentei axel
sobre a recomendação do Gufran , mas isso me desapontou enormemente. Meu objetivo era encontrar um substituto de CLI para DownThemAll
, porque ele sobrecarrega a CPU e o disco rígido e diminui todo o sistema, mesmo em um Mac Pro de 8 núcleos. Eu também queria um substituto multithread para wget
e curl
, não algum kludge de um script que executa várias instâncias destes. Então eu procurei mais e encontrei o que eu acho que agora é o mais moderno e mais moderno multithreaded CLI downloader que existe - aria2 . O grande problema que tive com o axel
foi que ele "falsificou" o download de arquivos via SSL. Eu peguei fazendo isso com tcdump
. Estava baixando https
links como ordinário http
. Isso realmente me irritou e se eu não tivesse checado, eu teria tido uma falsa sensação de segurança. Eu duvido que muitas pessoas conheçam essa grave violação de segurança. Voltando a aria2
, é mais avançado que qualquer outro downloader. Suporta os protocolos HTTP (S), FTP, BitTorrent e Metalink, é multiplataforma, e é uma guerrilha de download. Ele maximiza a largura de banda do meu ISP sem carga na CPU ou no disco rígido, ao contrário do DTA. A página man é gigantesca. Eu nunca usarei mais do que algumas de suas muitas opções. E, por exemplo, verifiquei seu desempenho SSL com tcdump
e ele é sólido, não falso. Eu escrevi um script que imita o comportamento do DTA, se não a sua conveniência.
O comando básico que uso para obter largura de banda máxima é
aria2c --file-allocation=none -c -x 10 -s 10 -d "mydir" URL
-c
permite a continuação do download se for interrompido, -x 10
e -s 10
permitem até 10 conexões por servidor e -d "mydir"
envia o arquivo ao diretório mydir
.
aria2files.sh
:
#!/bin/bash
filename="" # get filename from command line argument
while read -r line
do
if [ "$line" ] # skip blank lines
then
if [[ "$line" =~ (https?|ftp)\:\/\/ ]] # line contains a URL, download file
then
echo "URL: '$line'"
aria2c --file-allocation=none -c -x 10 -s 10 -d "$currdir" "$line"
else # line contains a directory name, create directory if not already present
echo "Directory: '$line'"
currdir="$line"
if [ ! -d "$currdir" ]
then
mkdir -p "$currdir" # '-p' enables creation of nested directories in one command
fi
fi
fi
done < "$filename"
Ele lê um arquivo de texto no formato:
files.txt
:
dierctory 1
url1
url2
…
directory 2/subdirectory/sub-subdirectory/…
url3
url4
…
…
…
O script lê o nome do arquivo na linha de comando:
aria2files.sh files.txt
Cria os diretórios e os downloads para eles. Pode criar diretórios aninhados, como mostrado no segundo exemplo.
Para mais detalhes veja meu post Script Bash para baixar arquivos de URLs para diretórios especificados listados em um texto arquivo .