我在Gufran的推荐下尝试了axel,但它让我非常失望。我的目标是找到一个命令行界面替代品来取代DownThemAll,因为它占用CPU和硬盘资源,在8核Mac Pro上甚至会拖慢整个系统。我还想要一个多线程替代品来替代wget和curl,而不是运行多个这些实例的脚本。所以我继续搜索,找到了我认为现在是最先进的多线程命令行下载工具--aria2。我对axel的一个大问题是它“伪造”了通过SSL下载文件。我用tcdump发现了这一点。它将https链接下载为普通的http链接。这真的让我很生气,如果我没有检查的话,我可能会有一种虚假的安全感。我怀疑很少有人知道这个严重的安全漏洞。回到aria2,它比任何其他下载工具都更先进。它支持HTTP(S)、FTP、BitTorrent和Metalink协议,是跨平台的,并且是一个下载战士。它可以充分利用我的ISP带宽,而不会给CPU或硬盘带来负载,这与DTA不同。它的手册非常庞大,我永远不会使用其中的很多选项。顺便说一句,我用tcdump检查了它的SSL性能,它是可靠的,不是伪造的。我编写了一个模仿DTA行为的脚本,虽然不像DTA那样方便。
我用来获取最大带宽的基本命令是:
aria2c --file-allocation=none -c -x 10 -s 10 -d "mydir" URL
使用
-c
选项可以在下载中断后继续下载,
-x 10
和
-s 10
选项允许每个服务器最多建立10个连接,
-d "mydir"
选项将文件输出到目录
mydir
。
aria2files.sh
:
#!/bin/bash
filename="$1" # 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"
它读取格式为文本文件:
files.txt
:
dierctory 1
url1
url2
…
directory 2/subdirectory/sub-subdirectory/…
url3
url4
…
…
…
脚本从命令行中读取文件名。
aria2files.sh files.txt
它创建目录并下载到这些目录中。它可以创建嵌套目录,如第二个示例所示。
要了解更多详细信息,请查看我的帖子
从URL下载文件到指定目录的Bash脚本。
axel
,与wget
相比,axel
速度更快了。我认为在大多数情况下,我的下载速度瓶颈主要有三个方面:1. 有些东西占用了带宽(就像您说的:“我很慢”)。2. 单线程下载。3. 服务器速度慢。但是对于1和3这两点,我无能为力。 - Teifiaxel
多线程比wget
表现更好,那么有可能是你的计算机与远程服务器之间的延迟非常高。请检查一下你与远程服务器的 ping 值。 - John Siu