[Share Experiences] 使用脚本撰写一个基于wget的下载工具
Tofloor
poster avatar
阿甘
deepin
2022-09-02 04:39
Author

1 网络下载工具很多,为什么要自己写一个?

网络下载工具包括浏览器、迅雷等,这些工具确实好用,有熟悉的图形用户界面,多线程下载,大家想都不想,就会使用他们。但他们存在缺陷:

(1)某些服务器的限制,不允许使用迅雷等多线程下载工具;

(2)某些时候网络带宽受限,网速不稳定,使用这些工具经常中途失败,重新下载也不行;

(3)天下没有免费的午餐,他们往往带有广告,令人讨厌。

以上原因是我自己要写一个下载工具的动机。

2 基本思路

要尽量用系统现成的轮子,而且是质量可靠的轮子,这个轮子有了,就是”wget",使用它就可以直接下载网络文件,但不方便。于是,利用shell脚本语言,自己写一个,让这段脚本运行时,能提示用户输入网址,输入下载后保存的文件名,下载完成后,可以继续新的下载任务,直至用户自己想退出为止。

3 脚本代码

详见文件:我要下载.zip

这个代码定义了两个函数:

download:执行一次下载任务

main:提供主界面,调用download

4 安装配置

首先,解压我要下载,zip,获得“我要下载”这个文件(不带扩展名),终端进入这个目录下,执行如下命令,将这个文件的属性进行设置(使之可执行),并将文件复制到/usr/bin目录下

$ sudo chmod +x  ./我要下载

$ sudo cp ./我要下载 /usr/bin/我要下载

5 如何运行

在下载文件存放的目录下,执行如下终端命令:

$ 我要下载

根据提示操作即可。

Reply Favorite View the author
All Replies
神末shenmo
deepin
Spark-App
Q&A Team
2022-09-02 04:47
#1

简单清晰的练习用脚本

可以放到开源平台上

Reply View the author
ti-ji
deepin
2022-09-02 04:53
#2

感觉变得更加麻烦了。

如果想对小白用户提供帮助(不懂命令操作的),最好还是搞个 GUI/TUI,在写个 Desktop file。

Reply View the author
阿甘
deepin
2022-09-02 05:11
#3
ti-ji

感觉变得更加麻烦了。

如果想对小白用户提供帮助(不懂命令操作的),最好还是搞个 GUI/TUI,在写个 Desktop file。

也可以把下载的那个脚本文件”我要下载"直接放到桌面上,直接双击运行,在弹出的对话框中选择”在终端运行“,这是最简单的方式,但缺陷是,文件默认下载到桌面上。

对于小白用户,确实需要GUI,但linux天生就是为发烧友而存在的。必须越过”linux shell"脚本编写这道基础门槛。

Reply View the author
阿甘
deepin
2022-09-02 05:11
#4
It has been deleted!
jjcui8595
deepin
2022-09-02 05:21
#5

like

Reply View the author
deepin-chinaren
deepin
2022-09-02 05:47
#6

这个脚本一但下载,如果关闭了终端,但是还是下载,如果不下了,也没有办法停下来呀?

Reply View the author
deepin-chinaren
deepin
2022-09-02 05:54
#7

就是我要下载删除了,下的资料也删除了,流量还在动,也不知道下到那去了,太可怕了没有控制

Reply View the author
deepin-chinaren
deepin
2022-09-02 06:06
#8

下载的速度不如自己的下载器快,自带的下载器3.3G都下载完了,我要下载才890M。这个可以做为学习编辑的例子来学习学习。也可以在QT里编写下,在完善一下,可能会更好一点。还是觉得你挺牛的!赞一个!

Reply View the author
阿甘
deepin
2022-09-02 06:13
#9
It has been deleted!
阿甘
deepin
2022-09-02 06:14
#10
deepin-chinaren

就是我要下载删除了,下的资料也删除了,流量还在动,也不知道下到那去了,太可怕了没有控制

下载时,提示你的资料保存的位置。

Reply View the author
阿甘
deepin
2022-09-02 06:30
#11
deepin-chinaren

下载的速度不如自己的下载器快,自带的下载器3.3G都下载完了,我要下载才890M。这个可以做为学习编辑的例子来学习学习。也可以在QT里编写下,在完善一下,可能会更好一点。还是觉得你挺牛的!赞一个!

这是单线程,你的下载器是多线程,所以有差别。在资源带宽充裕的情况下,

且服务器不对客户端下载限速,一般的下载器速度可能会快一点,但一般情况下,web服务器会限速,限定时间,这时候用多线程下载器就会遇到问题,甚至被踢。

例如,百度飞浆平台上的公开数据集下载,我使用迅雷或浏览器下载,都总是下到半路熄火,最后使用这个脚本,下载成功,而且屡试不爽。

注意,必须吧你下载的网址复制粘贴(深度终端粘贴快捷键:ctrl+shift+v)

Reply View the author
阿甘
deepin
2022-09-02 06:56
#12
deepin-chinaren

就是我要下载删除了,下的资料也删除了,流量还在动,也不知道下到那去了,太可怕了没有控制

你说的没错,即便关闭终端,也会再后台把正在下载的那个任务完成。

Reply View the author
xiao80
deepin
2022-09-02 10:59
#13
阿甘

也可以把下载的那个脚本文件”我要下载"直接放到桌面上,直接双击运行,在弹出的对话框中选择”在终端运行“,这是最简单的方式,但缺陷是,文件默认下载到桌面上。

对于小白用户,确实需要GUI,但linux天生就是为发烧友而存在的。必须越过”linux shell"脚本编写这道基础门槛。

结合 zenity 提供的 ui 控件,就可以脱离终端了

https://help.gnome.org/users/zenity/stable/

Reply View the author
阿甘
deepin
2022-09-02 15:49
#14
xiao80

结合 zenity 提供的 ui 控件,就可以脱离终端了

https://help.gnome.org/users/zenity/stable/

zenity好,但在调用时总是有警告,毕竟它不是deepin维护的工具,这些桌面GUI的命令,为什么deepin官方自己提供?比如它已经提供了dde-open,但由于没有帮助文档,无法在脚本中调用,并取得返回值。

Reply View the author
ti-ji
deepin
2022-09-02 16:06
#15
阿甘

zenity好,但在调用时总是有警告,毕竟它不是deepin维护的工具,这些桌面GUI的命令,为什么deepin官方自己提供?比如它已经提供了dde-open,但由于没有帮助文档,无法在脚本中调用,并取得返回值。

$ xdg-open --help
xdg-open - opens a file or URL in the user's preferred application
Synopsis
xdg-open { file | URL }
xdg-open { --help | --manual | --version }
Use 'man xdg-open' or 'xdg-open --manual' for additional info.

$ dde-open --help
Usage of /home/demo/dde-open:
  -version
        show version

确实大无语。。。。

Reply View the author
deepin-chinaren
deepin
2022-09-02 16:37
#16

实际上完全不作用那样安装什么程序,只要你在终端执行wget url 回车就可以下载了,作用是一样的。

Reply View the author
阿甘
deepin
2022-09-07 04:00
#17

deepin内置了一个下载器,完全是DDE风格的GUI,非常好!

image.png

Reply View the author