Aria2 + Rclone 实现 OneDrive、Google Drive 等网盘离线下载

请注意,本文编写于 580 天前,最后修改于 14 天前,其中某些信息可能已经过时。

前言

Aria2 有一个配置项on-download-complete,在下载完后执行一个脚本。当下载完成后 Aria2 会给脚本传递3个变量 $1$2$3 分别为 gid 、文件数量、文件路径。利用这个配置项和这些变量就可以实现很多功能,比如下载完成后调用 Rclone 进行上传操作。整个过程简单来说就是,Aria2 下载文件到 VPS ,完成后告诉 Rclone 将这个文件上传到网盘。理论上只要是 Rclone 支持的网盘,都可以按照这个思路来实现离线下载。

如果你还没有合适的 VPS,推荐去看《便宜高性价比 VPS 推荐》。其中 OneVPS 拥有无限流量的,非常适合用来离线下载,使用优惠码VPSWELCOME可以打5折,最低月付仅2.5美元。

安装 Aria2

这里使用 Aria2 一键安装管理脚本 增强版,执行下面的代码下载并运行脚本,出现脚本操作菜单输入 1 开始安装。

wget -N git.io/aria2.sh && chmod +x aria2.sh && ./aria2.sh

安装和配置 Rclone

RCLONE 官方提供了一键安装脚本

curl https://rclone.org/install.sh | sudo bash

安装完后,输入 rclone config 命令进入交互式配置选项,按照提示一步一步来进行操作即可。如果你一脸懵逼,可以去看《Rclone 安装配置教程》来了解配置的详细过程。

配置自动上传脚本

Aria2 一键安装管理脚本 增强版 整合了 Aria2 完美配置 ,安装后会附带一些列增强功能脚本,Rclone 自动上传脚本就是其中之一。由于默认不启用,所以需要手动启用。

  • 输入nano /root/.aria2c/upload.sh打开自动上传脚本进行编辑,脚本中有中文注释,按照自己的实际情况进行修改,一般只需要修改下面2个部分。
# Rclone 配置时填写的网盘名(name)
DRIVE_NAME='Onedrive'
# 网盘目录。即上传目标路径,留空为网盘根目录,末尾不要有斜杠。
DRIVE_PATH='/DRIVEX/Download'
如果你对 nano 编辑器不熟悉,可以去看《Linux 下适合新手的文本编辑器 nano 使用教程
  • 输入nano /root/.aria2c/aria2.conf打开 Aria2 配置文件进行修改。或使用Aria2 一键安装管理脚本 增强版中的手动修改选项打开配置文件进行修改。找到“下载完成后执行的命令”,把clean.sh替换为upload.sh
# 下载完成后执行的命令
on-download-complete=/root/.aria2c/upload.sh
  • 重启 Aria2
service aria2 restart

使用

当你进行完以上所有操作,现在下载文件就会自动上传至相应的网盘,本地的文件也会自动删除。

由于 Aria2 是命令行后端软件,需要配合前端GUI才能有更好的使用体验,对于从来没有接触过的萌新,建议去看《Aria2 前端面板 AriaNg 使用教程》来了解相关基础知识。

遇到问题如何处理

严格按照教程来进行操作不会遇到问题,如果有问题那一定是你自身的问题,请仔细阅读教程中的每一个字。

FAQ

遇到问题先看 FAQ ,这里记录了有关 Aria2 的常见问题与解决方案。

提问

你可以选择加入 Aria2 TG群和小伙伴们一起讨论。要注意提问的方式和提供有用的信息。提问前最好去了解《提问的智慧》,这能更好的帮助你去解决问题和节约时间。诸如“为什么不能使用?”、“那你能帮帮我吗?”之类的问题并不能解决什么问题,你只能得到否定的回答。


配合第三方百度网盘工具,还可以实现百度网盘转存其他网盘这样的骚操作,方法参见《百度网盘转存到 OneDrive 、Google Drive 等其他网盘》。

更多 Aria2 教程


相关 TG 频道:Aria2 Channel

相关 TG 群组:Aria2 Group


本博客已开设 Telegram 频道,欢迎小伙伴们订阅关注。

添加新评论

已有 104 条评论

首先感谢大佬的分享,看到下面的评论,同样有这方面需求,我直接复制下
但本人有几个 onedrive,想实现 aria2 下载到不同的目录,文件通过 rclone 上传到不同网盘。
比如:
aira2 下载到 /home/A, 自动上传到 A 网盘;
aira2 下载到 /home/B, 自动上传到 B 网盘;
小白一枚,所以能不能帮忙修改下代码,谢谢

时间精力有限,这需要重构脚本和大量时间去测试,目前暂时不打算做这个功能。你可以通过运行多个 Aria2 去实现,每个 Aria2 下载完上传到不同的网盘。Docker 跑多个容器是最简单实现的方式,现有的思路我已经写在了 Aria2 Pro 那篇文章中了。

感谢大佬的无私分享,我跟着你的步骤来,一步到位,完全没有任何差错,教程清晰易懂,非常nice!

你好,想请问下下载完成后自动移动文件和文件夹到指定目录的问题。我是个linux小白,研究了几天脚本在你的脚本基础上改了改。现在下载的单个文件可以正常自动移动,可是文件夹不行,麻烦帮我看看。

脚本主要部分如下:

if [ $2 -eq 0 ]; then
    exit 0
fi
if [ $2 -eq 1 ]; then
    mv "$3" /download-complete
fi
echo [$(date)] $2, $3, $1 "<br>" >> /download-complete/_log.html
P3TERX P3TERX 回复 @henry meng
0 0

没这么简单的,要考虑很多问题,单文件、多文件、多层级目录。这个需求似乎很多人有,有空我会专门写一个脚本。着急用可以网上搜,应该有人已经写过类似的。

我有个疑问,aria2可以直接下载到rclone挂载的目录么?如果下到本地,再上传google drive是不是多了一个步骤,而且下的文件不能超过vps的硬盘大小

不可以

aria2下载后会自动解压压缩包的么?我发现下了个bd资源里面有个几百M的zip包里面的好几G的tif图片全被解压出来了,简直魔鬼 ⌇●﹏●⌇

不会,没有这个功能

保姆级教程,谢谢大佬

rclone一直没挂载上OneDrive,可以整合下OneDriveuploader吗?

没用过

tardlk tardlk 回复 @P3TERX
0 0

萌咖大佬开发的专门给vps上传OneDrive用。可惜我不会用 (╯°A°)╯︵○○○

tardlk tardlk 回复 @P3TERX
0 0

我按照教程先下载了aria2,然后成功配置了rclone,现在aria2,可以下载文件但是不会自动上传。能给我的邮箱私发您的QQ然后私聊吗,我搞了一天直到晚上才连接到rclone,现在就是不上传,真的好气。

清风竹影 清风竹影 回复 @tardlk
0 0

绕了一圈又回到rclone了,OneDriveuploader上传找过2G的文件有bug,大佬一直没有修改

tar: Error is not recoverable: exiting now
[错误] Aria2 解压失败 !
该如何解决?gcp的vps,debian9系统。

P3TERX P3TERX 回复 @熊俊翰
0 0

可能是我昨天更新导致了这个问题,你可以试下今天的新版本。

熊俊翰 熊俊翰 回复 @熊俊翰
0 0

好的,今天的脚本已经没有问题了。

还有个问题,这个文件下载完了我知道进度,那文件上传到Google drive的进度有办法看吗?

熊俊翰 熊俊翰 回复 @P3TERX
0 0

我现在部署好了,对了这个有没有办法让bt只下载不上传?因为谷歌云下载流量不收费上传收费!

P3TERX P3TERX 回复 @熊俊翰
0 0

进度通过日志可以查看
不上传是不可能的,BT 下载是人人为我,我为人人。

为什么我都配置好以后用ariang下载,在面板里的正在下载、正在等待、已完成这几个菜单点进去都看不到任务呢?但是实际上下载已经开始了,只能看到下载速度,aria2状态那个菜单一直在已连接和未连接之间跳来跳去。下载完以后也自动上传到网盘了,但就是面板里我做不了任何操作啊,查看不了也暂停不了,咋回事请教一下。

网络问题,带宽被占满了。

吸引我的你 吸引我的你
2 0

想请问大佬,我用bt下载的文件没有下完,但是种子已经没有速度了(没有人提供上传了),但是还没下到100%,(只有60%-80%左右)请问这种情况下,该怎么办才能触发自动上传脚本呢?{剩下的没下的内容都不要了}.

P3TERX P3TERX 回复 @吸引我的你
0 0

先暂停,然后把没有下载完的文件去掉,然后再开始下载。

大佬的这个教程太适合小白用户了,感谢
另外想请教一下,我这边上传速度上不去是怎么回事。刚开始上传时,可以保持在25-30mb/s,然后慢慢的速度就降下去了,最后稳定在5-10mb/s。想知道是微软方面限速了还是rclone api的问题,有解决的办法吗

限速,无解。

你好,能不能加一个下载上传完自动删除种子文件的功能啊,现在只有上传完自动删除下载文件,不能删除种子,下载量大起来会有一堆的种子,非常需要这个功能,麻烦大佬添加一下这个功能

这个很早以前就考虑过,并有几种方案:

  1. 删除指定种子文件,无法获取种子文件的路径,无法实现。
  2. 删除所有种子文件,会影响正在下载和等待下载的任务,弃坑。
  3. 在管理脚本中提供一键删除种子文件的选项,同上,小白用户不懂自己删除后出现问题骂脚本有问题,不做。

实际上种子文件占用空间非常小,所以删不删无所谓。强迫症请自己手动删除。

小W 小W 回复 @P3TERX
0 0

可以有这个功能,放在aria2.conf,有需要自己开,默认不开就行,不过你说没法获取种子路径那就没办法了

你好,使用您的脚本可以安装,但是启动不了/etc/init.d/aria2: line 64: 13894 Illegal instruction nohup aria2c -c "${CONFIG}" >> "${LOG}" 2>&1
[错误] Aria2 启动失败 !出现这个提示,我用的是斐讯N1刷的Armbian5.77,自己编译的可以运行,但是功能不全,

我这个安装脚本只推荐在 x86 平台上用,自己编译替换/usr/bin/aria2c即可。不知道你指的功能不全是什么意思。

yyfs yyfs 回复 @P3TERX
0 0

自己编译的启用功能只有BitTorrent和Message Digest,其他的都没有,谢谢解答,

yyfs yyfs 回复 @P3TERX
0 0

自己编译的,功能只有这些

缺少依赖

yyfs yyfs 回复 @P3TERX
0 0

哦哦,能说说怎么安装依赖吗?谢谢

https://github.com/aria2/aria2#how-to-build
官方 GitHub 页面有说明。
你其实可以不用编译,直接apt install -y aria2就能用了。

yyfs yyfs 回复 @P3TERX
0 0

感谢回复,直接apt安装的话版本是1.30.0,感觉版本有点老了,谢谢

yyfs yyfs 回复 @P3TERX
0 0

按照你给的网址把依赖安装完又编译了一次,功能全有了,非常感谢

文件一直上传,文件本身大小1.9个G,上传了3.6个G还是继续上传,如果不手动结束这个进程就一直在后台台上传,网盘也找不到上传的文件。

这说明上传受限了。等一段时间,或者换个网盘账号。

大佬,冒昧的问个小白问题,说起来惭愧,我薅的谷歌云+Aria2 + Rclone到google drive,我搭建的是台湾地区实例,只用于离线下载,没有搭建酸酸乳,听人说谷歌云的入站流量免费,出站到谷歌产品的流量也是免费,但是却产生了流量的费用,由于脑容量不太够,不太懂太深的技术知识,大佬能否解我疑惑。万分感谢!!!

P3TERX P3TERX 回复 @幕落散场
0 0

如果是 BT 下载,你下载的同时会给其它在下同样资源的人上传,所以会产生收费流量。

谢谢大佬分享,发现一个问题,我百度云下载文件夹(文件夹里大概3-9个文件)的时候呢,发现部分文件不会被上传,这锅是我背吗(看了下脚本,感觉是 $2 这个参数没传好,或者 aria2 下载过快导致比较慢下载完成的文件不会触发脚本?

本菜鸡也水了篇博客,此中详细说明了解决方式,希望让这个配置更完美些~

这个问题在最初我写这些脚本的时遇到过,很多网友也反馈过。解决这个问题的核心是save-session-interval=1force-save=true这两项参数。如果你不是用的我提供的配置文件,那问题应该是出现在这里。如果你是完全用的我提供的整套方案,是不会有这个问题的。

看了你写的文章,需要指出的错误是,每一次脚本触发都是单独的进程,比如百度云的文件下载,一个文件下载完就触发一次上传脚本,所以不存在参数被覆盖一说,还有这不叫参数,叫变量。文件没被上传无非是脚本触发错误(没有触发或路径判断错误)或者上传受限(本地进程自行终结或服务端拒绝上传),这些从日志中能直观的看出来。

其实你写的这些都是我以前尝试过的,但任务开始传递变量会导致路径为空,没有开启强制保存(不会生成.aria2文件)会导致任务丢失,这都是以前遇到过的坑。

Justf Justf 回复 @P3TERX
0 0

谢谢大佬指点,明白了

请教下大佬,我修改了这一行里面的文件夹改为了Download
folder='/Download' #网盘里的文件夹,留空为整个网盘
但发现通过Aria2导出115的文件夹下载会被自动上传到“/Download/new folder/115上的文件夹名字”
想请问下如何避免被添加到new folder 这个文件夹呢

如果是前端传递的路径,脚本没办法去控制,你只能通过前端去解决。

tyhunter tyhunter 回复 @P3TERX
0 0

刚尝试了一下解决了,原来是我路径多加了“/”
现在用这个路径:
folder='Download'
就不会被自动创建并归类到new folder 这个文件夹里了

这... 好吧。感谢你分享使用经验。

大佬,我参考了您给的链接文章,试着配置了一下,重新挂载了另外两个备用google drive,但是尝试同步或拷贝命令,却只能是同步/拷贝了文件夹,文件文法同步/拷贝,代码如下,能指出我哪里错了吗,实在无奈。下面的“googledrive”是主要离线下载的网盘。另外两个是新配置的。

幕落散场 幕落散场 回复 @幕落散场
0 0

小白没基础真是致命,折腾了一天,才发现网盘对拷出现404的原因竟然是rclone的版本BUG,1.47版本升级最新1.48,可以正常对拷。

P3TERX P3TERX 回复 @幕落散场
0 0

都是从小白过来的,折腾才能学到更多东西。

大佬,想请教个问题。
但是一直有个疑问,根据你的教程我配置好了,但是只能是理想下载到指定的一个google drive,如果本人有多个google drive ,想实现的功能是下载完成后的文件同时备份到另外的一个谷歌网盘,设置可以设置多个同时备份,因为这样的话,如果教育网盘其中一个翻车的话,其他网盘都有备份。
以上的功能能怎样实现,烦请大佬解惑。感谢了。

P3TERX P3TERX 回复 @幕落散场
0 0

可以用 Rclone 进行网盘对烤,具体操作参考这篇。重要数据最好本地保存。

为啥抑制评论不上!!!
很感谢大佬分析的教程,安装成功,上传暂时也没有问题,但本人有几个onedrive,想实现aria2下载到不同的目录,文件通过rclone上传到不同网盘。
比如:
aira2下载到/home/A,自动上传到A网盘;
aira2下载到/home/B,自动上传到B网盘;
我根据您的上传代码修改了一下,发现用不了,小白一枚,所以能不能帮忙修改下代码,谢谢

P3TERX P3TERX 回复 @灭尽龙
0 0

想法不错,等有空

  1. 1
  2. 2