说明:网盘挂载方法参考:在Debian/Ubuntu上使用rclone挂载Google Drive网盘,Aira2
安装参考:BT种子/磁力链接下载工具:Aria2一键安装管理脚本,以上工作都准备好了后,就可以使用Aria2
将文件电影等资源下载到网盘了,鉴于hostloc
有大佬说因为某些原因,不能将下载路径默认为Google Drive
网盘指定的本地文件夹,就发现了这个方法,能直接在挂载后使用。通过配置项on-download-complete
来完成下载文件自动移到Google Drive
网盘里。
更新
【2018.10.30】
这里分享下萌咖大佬的Aira2上传脚本,不过是精简版,全能版暂不分享,精简版包含以下功能:
1、脚本适用于Rclone挂载的网盘,比如Onedrive/Google Drive等。
2、判断上传文件的文件大小区间。
限制最低上传大小:可防止产生的.aria2后缀文件一起上传到网盘。
限制最高文件大小:适用于Onedrive等,官方限制上传不能超过15G,其它可自行更改其数值。
3、支持文件名中包含空格等特殊字符。
使用方法
原理是当下载完后aria2
会给脚本传3
个参数$1
、$2
、$3
分别为gid
、文件数量、文件路径。我们对文件路径这个字符串处理一番就可以达到目的了。
新建脚本文件rcloneupload.sh
,并复制下面代码:
#!/bin/bash
GID="$1";
FileNum="$2";
File="$3";
MinSize="5" #限制最低上传大小,默认5k
MaxSize="157286400" #限制最高文件大小(单位k),默认15G
RemoteDIR="/RATS/"; #rclone挂载的本地文件夹,最后面保留/
LocalDIR="/download/"; #Aria2下载目录,最后面保留/
if [[ -z $(echo "$FileNum" |grep -o '[0-9]*' |head -n1) ]]; then FileNum='0'; fi
if [[ "$FileNum" -le '0' ]]; then exit 0; fi
if [[ "$#" != '3' ]]; then exit 0; fi
function LoadFile(){
IFS_BAK=$IFS
IFS=$'\n'
if [[ ! -d "$LocalDIR" ]]; then return; fi
if [[ -e "$File" ]]; then
FileLoad="${File/#$LocalDIR}"
while true
do
if [[ "$FileLoad" == '/' ]]; then return; fi
echo "$FileLoad" |grep -q '/';
if [[ "$?" == "0" ]]; then
FileLoad=$(dirname "$FileLoad");
else
break;
fi;
done;
if [[ "$FileLoad" == "$LocalDIR" ]]; then return; fi
EXEC="$(command -v mv)"
if [[ -z "$EXEC" ]]; then return; fi
Option=" -f";
cd "$LocalDIR";
if [[ -e "$FileLoad" ]]; then
ItemSize=$(du -s "$FileLoad" |cut -f1 |grep -o '[0-9]*' |head -n1)
if [[ -z "$ItemSize" ]]; then return; fi
if [[ "$ItemSize" -le "$MinSize" ]]; then
echo -ne "\033[33m$FileLoad \033[0mtoo small to spik.\n";
return;
fi
if [[ "$ItemSize" -ge "$MaxSize" ]]; then
echo -ne "\033[33m$FileLoad \033[0mtoo large to spik.\n";
return;
fi
eval "${EXEC}${Option}" \'"${FileLoad}"\' "${RemoteDIR}";
fi
fi
IFS=$IFS_BAK
}
LoadFile;
授权chmod +x rcloneupload.sh
,然后再到Aria2
配置文件中加上一行on-download-complete=/root/rcloneupload.sh
即可,后面为脚本的路径。最后重启Aria2
生效。
本文只提到了Google Drive
网盘挂载方法,如果你想用Onedrive
可查看→Rclone挂载Onedrive网盘教程。对于不想用Rclone
挂载Onedrive
的,可以参考博客另一个教程→传送门。
版权声明:本文为原创文章,版权归 Rat's Blog 所有,转载请注明出处!
本文链接:https://www.moerats.com/archives/482/
如教程需要更新,或者相关链接出现404,可以在文章下面评论留言。
小白请教:我把onedrive上的video目录通过rclone挂载到主机上的/home/video目录,请问能否直接把aria2的下载目录设为/home/video呢,这样下载下来的视频会不会自动上传?
理论上可以,需要改参数,不过不推荐,还是转移好点
大神请教一下,因为小鸡硬盘不够,所以想设置为下载目录,请问这里需要改什么参数呢?尝试过直接设置为下载目录了,但是写入速度太难看导致下载速度也变慢了
老大帮我看看这个配置哪里出错了。
手工上传没问题,自动上传不行。
OneDriveUploader -c /root/auth.json -s "/usr/local/caddy/www/aria2/Download/" -r "download"
(Main:2/2) nent.zip.aria2: [1/1 | 100% | Time: 0s | Remain: 0s]
bash /root/.aria2/OneIndexupload.sh 没有错误
/root/.aria2/OneIndexupload.sh 配置:
RemoteDIR="download/"; #rclone挂载的本地文件夹,最后面保留/
LocalDIR="/usr/local/caddy/www/aria2/Download/"; #Aria2下载目录,最后面保留/
Uploader="/usr/local/bin/OneDriveUploader"; #上传的程序完整路径,默认为本文安装的目录
Config="/root/auth.json"; #初始化生成的配置auth.json绝对路径,参考第3步骤生成的路径
/root/.aria2/aria2.conf配置
on-download-complete=/root/.aria2/OneIndexupload.sh
on-download-complete=OneIndexupload.sh
请老大给看看
这个重复了on-download-complete,看下aria2日志
大佬,我按照这个配置成功后,尝试下载了,昨天下载完很快就自动上传了,今天再下载,发现就不自动上传了,昨天下载的是单个文件,今天下载的是有文件夹的,是不是有这个原因?
大佬,我重新配置了一下,现在会自动移到挂载的目录,但是没有上传到网盘,大佬知道怎么看原因吗?
upload:UPLOAD 1.1P 8.8G 1.0P 1% /home/GoogleDrive
大佬,我在debian 10系统下挂载了一个谷歌团队盘,部署了aria2,离线下载没问题。但用你这个脚本无法实现自动上传,检查了脚本中的参数没有问题。会是什么原因呢?
1、脚本编码问题,使用bash xx.sh命令检查下,没输出就正常
2、脚本没给可执行权限,+x。
3、aria2.conf没有正确配置上传,或者脚本路径不对
谢谢,最后还是没找到问题。换了这个一键脚本:https://github.com/P3TERX/aria2.sh,把里面的autoupload.sh编辑了一下,最后终于搞定了。
请问您是怎么修改的?
我这边挂载了OneDrive和GoogleDrive,想上传到两个网盘,脚本修改如下,测试没成功,麻烦看一下哪里有问题
!/bin/bashGID="$1";
FileNum="$2";
File="$3";
MinSize="5" #限制最低上传大小,默认5k
MaxSize="12582912" #限制最高文件大小(单位k),默认15G
RemoteDIR="/root/GoogleDrive/"; #rclone挂载的本地文件夹,最后面保留/
RemoteDIRR="/root/OneDrive/"; #rclone挂载的本地文件夹2,最后面保留/
LocalDIR="/root/download/"; #Aria2下载目录,最后面保留/
if [[ -z $(echo "$FileNum" |grep -o '[0-9]*' |head -n1) ]]; then FileNum='0'; fi
if [[ "$FileNum" -le '0' ]]; then exit 0; fi
if [[ "$#" != '3' ]]; then exit 0; fi
function LoadFile(){
FileLoad="${File/#$LocalDIR}" while true do if [[ "$FileLoad" == '/' ]]; then return; fi echo "$FileLoad" |grep -q '/'; if [[ "$?" == "0" ]]; then FileLoad=$(dirname "$FileLoad"); else break; fi; done; if [[ "$FileLoad" == "$LocalDIR" ]]; then return; fi EXEC="$(command -v cp)"; if [[ -z "$EXEC" ]]; then return; fi Option=" -f"; cd "$LocalDIR"; if [[ -e "$FileLoad" ]]; then ItemSize=$(du -s "$FileLoad" |cut -f1 |grep -o '[0-9]*' |head -n1) if [[ -z "$ItemSize" ]]; then return; fi if [[ "$ItemSize" -le "$MinSize" ]]; then echo -ne "\033[33m$FileLoad \033[0mtoo small to spik.\n"; return; fi if [[ "$ItemSize" -ge "$MaxSize" ]]; then echo -ne "\033[33m$FileLoad \033[0mtoo large to spik.\n"; return; fi eval "${EXEC}${Option}" \'"${FileLoad}"\' "${RemoteDIRR}"; fi EXEC="$(command -v mv)"; if [[ -z "$EXEC" ]]; then return; fi Option=" -f"; cd "$LocalDIR"; if [[ -e "$FileLoad" ]]; then ItemSize=$(du -s "$FileLoad" |cut -f1 |grep -o '[0-9]*' |head -n1) if [[ -z "$ItemSize" ]]; then return; fi if [[ "$ItemSize" -le "$MinSize" ]]; then echo -ne "\033[33m$FileLoad \033[0mtoo small to spik.\n"; return; fi if [[ "$ItemSize" -ge "$MaxSize" ]]; then echo -ne "\033[33m$FileLoad \033[0mtoo large to spik.\n"; return; fi eval "${EXEC}${Option}" \'"${FileLoad}"\' "${RemoteDIR}"; fiIFS_BAK=$IFS
IFS=$'n'
if [[ ! -d "$LocalDIR" ]]; then return; fi
if [[ -e "$File" ]]; then
fi
IFS=$IFS_BAK
}
LoadFile
搞定了,授权不知道为什么从755变成了711,重新授权就可以
aria2下载到服务器 服务器上传到onedrive,这个过程中间服务器流量扣费嘛?
需要消耗服务器的双向流量。
评论错博文了还行,麻烦删掉一下谢谢Orrrz
好的
你好,博主请问一下,自动上传是先离线下载到服务器吗?如果我下载的文件东西超过了服务器硬盘容量怎么办(比如:我服务器硬盘是25G的,但我离线下载的文件时30G的),像这种情况我该怎么办,是继续走服务器,还是通过域名走???
是的,先下载到服务器,再传到网盘,要是文件比硬盘大的话,就很容易爆。
你好,博主如果我下载种子的话,它自动上传是按照文件夹总大小来上传,还是按照里面单个文件来上传。还有一次性下载多个种子总大小超过服务器硬盘,它还是会爆吗?
按照整个种子进度上传,等于你说的整个文件夹。
博主,上传成功后本地文件会不会残留
按理说不会,实际就不清楚了
这个transmission之类的工具能照着用吗
不能
请问,我如果搭建aira2离线下载到Google drive,会自动清除vps上的文件吗
会。
aria2显示/bin/mv: failed to close '/root/GoogleDrive/mcc/msaimin.eXe': Input/output error 用的dd纯净Debian9
还有在上传某些文件夹时提示
curl: (3) [globbing] unmatched close brace/bracket in column 13
curl: (6) Could not resolve host: stay
curl: (6) Could not resolve host: night
curl: (6) Could not resolve host: Heaven's
curl: (6) Could not resolve host: Feel
curl: (6) Could not resolve host: I.presage
curl: (3) [globbing] unmatched close brace/bracket in column 7
curl: (3) [globbing] unmatched close brace/bracket in column 13
/root/rcloneupload.sh: eval: line 48: unexpected EOF while looking for matching `''
/root/rcloneupload.sh: eval: line 49: syntax error: unexpected end of file
转换下脚本格式看看,https://www.moerats.com/archives/225/。
请教一下目前遇到很神奇的问题...
GD挂载正常,但是在AriaNG中下载文件永远显示下载失败。迷的是尽管显示下载失败,本地目录可以看到已经有了该文件,文件大小符合;同时也成功同步到了Google Drive指定文件夹,文件大小也符合。下载文件也是得花那么长时间,但下载完成的文件全部都是损坏的。这过程中一切运行顺利也没啥报错之类的。
老哥有遇到过这种情况嘛?或者相应推测...
这个我也遇到过。我查了下,改下预分配方式,有些可以用默认的prealloc。有些只能none。另外,不能直接把下载目录设置为挂载文件夹。具体的你参考log文件
这个没咋遇到过。
泪奔啊~ 无法自动上传。。。上传脚本的位置,一直aria下载的目录都填写对了呀~
重启什么的都做了?
是不是把
rm -rf "$FileLoad";if [[ $? == '0' ]]; then
删除了就不会自动删除了?
是的。
为何删除了还是会删文件
需要重启aria2才生效。
重启aria2也不行 重启服务器也不行 有点搞不懂了
抱歉,我的锅,删除命令是多余的,本身就是用的mv命令,相当于把文件移走了,所以等于删除。
哈哈 好吧 那有办法换么?用copy?
你可以实践下。
确实比较好用,比原来用的稳定多了,原来老是上传大文件就失效,现在5G以内的文件,离线下载了20几部,都完整自动转到onedrive了。
老哥,似乎onedrive上传有bug?文件稍微大点超过1个g就上传不了,不知道怎么回事,800多兆倒是可以上传。。
这个BUG没遇到过,可能我传的文件没那么大。
如何重启重启Aria2?
用的逗比那个脚本吗?直接使用service aria2 restart重启
在其他软件配置里里加on-download-complete可以吗?
不能,只能在aria2配置文件里。
站长你好,怎么新建脚本呀
如果你是用ssh的话,touch,,nano,vi都行,不过你可以使用ftp登录vps(推荐WInSCP),鼠标右键新建文本就行了,然后把代码复制进去。
好的,但是又遇到一个问题,就是我搭建aria2+onedrive做自动上传,昨天晚上链接成功了,今天就连不上了呢
指的aria2不能连接?你可以检查下浏览器密匙,或者重启下系统。
好的,解决了,,但是又出了个问题,授权的时候出现
chmod: cannot access ‘rcloneupload.sh’: No such file or directory
授权的时候,rcloneupload.sh路径填对。
后台直接把权限改成777了可以吗
777也可以的,也可以通过FTP程序右键脚本设权限。
如何修改上传文件保存在onedrive的地址啊
这个建议多看看博客其它上传教程。
老哥。感谢分享。搭好了可以用。但是每次换个浏览器要重新填一次rpc密匙。不然连接不上
换浏览器肯定要重新填的。
给后面看教程的提个醒,aria2配置文件中的下载路径配置
dir=/root/Download
最后面不要有斜杠,否则会出现下面这样的日志:
11/03 01:29:08 [NOTICE] Download complete: /root/Download//Photon.Setup.0.3.0.exe
中间会出现2个斜杠的情况,这样参数传递给脚本就没办法处理。为此我懵逼了很久。
还有我很想知道.aria2文件如何自动删除。
这个细节倒没注意过,不过脚本里下载路径的/别去掉就行,至于.aria2 文件是下载完成后,aria2c会自动删除。只是有人反映.aria2文件会有上传现象,所以加了个上传判断。
我的.aria2文件不会删除,后来我找到原因了
force-save=ture现在toyo的aria2一键脚本现在把
这个选项开启了,就会保留.aria2文件。注释掉它就会自动删除。
现在终于完美了,下片去了。
感谢大佬的教程!
被墙了??.....
什么被墙?
网站啊
“找不到 www.moerats.com 的服务器 IP 地址”
我博客被打了两天,然后上了cf的5秒盾,所以会有这种情况,现在关了。
哦哦哦
站长您好,我的脚本遇到问题。aria2下载完成后应当调用GDupload.sh,但是日志显示"Could not execute user command: /root/GDupload.sh: No such file or directory"。我感到很困惑,on-download-complete=/root/GDupload.sh给出了绝对路径,这个问题很奇怪,不知我哪里搞错了什么。
老哥这个问题怎么解决的呢,我这边也是同样提示找不到这个文件,已经给了root 777权限
检查下编码?我给个解决方法你,首先安装一个工具,使用命令:
CentOS系统
yum install dos2unix -y
Debian/Ubuntu系统
apt install dos2unix -y
然后dos2unix /root/GDupload.sh,差不多就可以了
没给root可执行权限吧?
给了,如果没给会提示Permission Denied。反复尝试无果,我选择重装系统,从新来一遍,这次全部成功了,万幸。
脚本已更新,可以试试。
好的,多谢~
这个不需要折腾,能用就行。
rclone=${filepath/#$downloadpath/$rclone} #替换路径
有个小疑问,不是很明白这句话的作用 只有一个文件的时候,把rclone的挂载路径替换掉下载路径..
替换路径后,就可以mv移动。
我没有调参数,原文的方法1我尝试了是能够上传成功的,但是方法3我只能手动上传文件,但是不能自动上传文件,是什么原因呢?如何可以看上传的进度或者有什么日志吗?可能不能常上这个站,如果方便的话,开发者可以回复到我的邮箱吗?谢谢您!
说的是哪个教程?
onedrive+Aria2实现自动上传的,非自动脚本
能贴链接吗。这种脚本有好多。
创建脚本在哪个位置啊 任意目录下面吗
对,只要填的路径是对的就行。
脚本弄好了,配置文件也修改好了,aria2下载完文件并没有自动上传谷歌云,怎么办?
配置好了后还需要重启Aria2。
重启过了也是无反应呢,挂载也成功了
如果授权什么的都做好了还是没反应的话,这里再给个上传脚本你(只需要修改开头3个参数):
!/bin/bashpath=$3 #取原始路径,我的环境下如果是单文件则为/data/demo.png,如果是文件夹则该值为文件夹内某个文件比如/data/a/b/c/d.jpg
downloadpath='/root/Download' #Aria2下载文件目录
name='RATS' #配置Rclone时的name
folder='VPS' #网盘里的文件夹
if [ $2 -eq 0 ]
then exit 0fi
then rclone move "$filepath" ${name}:${folder}/ exit 0while true; do #提取下载文件根路径,如把/data/a/b/c/d.jpg变成/data/a
filepath=$path
path=${path%/*};
if [ "$path" = "$downloadpath" ] && [ $2 -eq 1 ] #如果下载的是单个文件
elif [ "$path" = "$downloadpath" ] #文件夹
then while [[ "`ls -A "$filepath/"`" != "" ]]; do rclone move "$filepath"/ ${name}:${folder}/"${filepath##*/}"/ --delete-empty-src-dirs done rm -rf "$filepath/" exit 0fi
done
Download complete: /usr/local/caddy/www/aria2/Download/nextcloud-14.0.0RC1.zip
/root/GDupload.sh: 1: /root/GDupload.sh: #!/bin/bash: not found
/root/GDupload.sh: 16: /root/GDupload.sh: Bad substitution
下载完看了下日志提示这个,要怎么解决呢
这个建议你百度下#!/bin/bash: not found。
bash的问题解决了,但是这个fi的问题不懂
/root/GDupload.sh: line 20: syntax error near unexpected token `fi'
/root/GDupload.sh: line 20: `fi'
这个具体百度其实都有解决方法。
我看了另一篇你的关于onedrive的文章,已经解决
老大,这个 GDupload.sh脚本适用于OneDrive吗?我用GoogleDrive成功了,然后OneDrive没发自动上传
下载时显示operation not permitted怎么办?种子可以下载,文件不行了
权限问题,你给予写入权限看看。或者检查下硬盘大小够不够。
很强大佬
折腾了下Aria2+OneDrive,发现了几点问题:
1、rclone在上传大文件时占用内存过大,可能引起OOM,导致上传失败。 2、先挂载再用mv命令,在上传时会加倍占用磁盘空间。rclone会先将文件文件copy至/tmp区,再上传,最后删除。这将导致磁盘空间的浪费。20G的磁盘只能下载10G的内容,要不就爆磁盘了。解决方案:
问题1、参考https://www.cnblogs.com/wangxiaoqiangs/p/5842713.html,防止oom杀rclone进程。 问题2、修改上传脚本,采用rclone move的方式上传文件。我的解决方案:
我用是Aria2配合OneDrive,从github上找到了shell版的onedrive上传脚本,有点问题魔改了下,并修改了博主的autoupload.sh脚本,达到完美的效果。 修改的autoupload.sh脚本和魔改的OneDrive脚本已经上传到Github了,详见https://github.com/lm317379829/OneDrive谢谢改进,一般直接放进去会有缓存问题,空间可能很快爆满,所以只能MV进去,加上网盘已经挂载了,就没使用rclone move,直接MV。还有OneDrive也可以挂载。看看这个:https://www.moerats.com/archives/491/。
个人觉得rclone其实并不太适合这个应用场景。
不管是GD还是OD都有很多调用api上传的脚本或第三方软件,它们在上传时效果比rclone要好不少,比如gdrive可以实现ar下载的同时上传到GD。
我修改的shell版onedrive在上传方面也比rclone好用。
不必拘泥于rclone。
你改的脚本一样会被杀,上传1.5G的iso,512的内存加上1G的swap,一样被杀
按照你的方法,提示Something went wrong, here is the API response:
这个大概API的问题。
不常用的话api是够的,我有空看看你修改的脚本吧。
大佬,请问层主说的第二个问题有办法解决吗?20G的可用空间实际只能用10G感觉好浪费啊。下载一个大文件,自动上传的时候服务器很容易就爆了。我应该如何修改脚本呢?谢谢!
就是把系统本身的mv移动命令,改成rclone自带的移动命令。rclone move
请问是指的EXEC="$(command -v mv)"改为EXEC="$(command -v rclone move)"吗?
不是,改最后的移动命令就行,大概是将eval "${EXEC}${Option}" '"${FileLoad}"\' "${RemoteDIR}";改成eval rclone moveto '"${FileLoad}" DriveName:Folder;后面的为配置的name和网盘文件夹,我没试过,你可以自己折腾看看。看下rclone官方文档
大佬,下了十个种子测试 就一个漏了 帮我看看be
Your share ratio was 0.0, uploaded/downloaded=12MiB/727MiB
mv: inter-device move failed: /www/wwwroot/216.155.135.***/Unnatural.E05.720p.FIX 字幕侠' to /cvh/gdrive/Unnatural.E05.720p.FIX字幕侠'; unable to remove target: Directory not empty
sh: 0: unknown operand,我又来了,这个问题又咋整啊,他不会复制。
可以试下单独安装bash并替换,先安装再passwd文件。
是上传脚本有问题,还是rclone有问题?
得把脚本整个都复制进去。
研究了半天,发现应该是因为busybox并不包含全部指令,顺便一提我用的是padavan路由器_(:з」∠)_有办法不用bash吗?
这个路由器没玩过,你百度下。
真的牛逼,要是能自动归类就好了。
目前只能修改成这样了,将就下。
离线了个小姐姐的视频后,谷歌把我网盘封了。妈耶!!!
我离线的是sexart。估计是版权问题吧。
运气这么差,我还没翻过车。