Rat's

使用Aira2下载文件后自动上传到Google Drive网盘
说明:网盘挂载方法参考:在Debian/Ubuntu上使用rclone挂载Google Drive网盘,Aira2...
扫描右侧二维码阅读全文
30
2018/10

使用Aira2下载文件后自动上传到Google Drive网盘

说明:网盘挂载方法参考:在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的,可以参考博客另一个教程→传送门

Vultr注册就送$50,可开日本/新加坡等机房,【点击注册】。
最后修改:2018 年 12 月 20 日 06 : 20 PM

发表评论

97 条评论

  1. hyx

    你好,博主请问一下,自动上传是先离线下载到服务器吗?如果我下载的文件东西超过了服务器硬盘容量怎么办(比如:我服务器硬盘是25G的,但我离线下载的文件时30G的),像这种情况我该怎么办,是继续走服务器,还是通过域名走???

    1. Rat's
      @hyx

      是的,先下载到服务器,再传到网盘,要是文件比硬盘大的话,就很容易爆。

      1. hyx
        @Rat's

        你好,博主如果我下载种子的话,它自动上传是按照文件夹总大小来上传,还是按照里面单个文件来上传。还有一次性下载多个种子总大小超过服务器硬盘,它还是会爆吗?

        1. Rat's
          @hyx

          按照整个种子进度上传,等于你说的整个文件夹。

  2. 5555

    博主,上传成功后本地文件会不会残留

    1. Rat's
      @5555

      按理说不会,实际就不清楚了

  3. lucifer

    这个transmission之类的工具能照着用吗

    1. Rat's
      @lucifer

      不能

  4. cheney

    请问,我如果搭建aira2离线下载到Google drive,会自动清除vps上的文件吗

    1. Rat's
      @cheney

      会。

  5. miao

    aria2显示/bin/mv: failed to close '/root/GoogleDrive/mcc/msaimin.eXe': Input/output error 用的dd纯净Debian9

    1. miao
      @miao

      还有在上传某些文件夹时提示
      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

      1. Rat's
        @miao

        转换下脚本格式看看,https://www.moerats.com/archives/225/。

  6. HYDROGEN

    请教一下目前遇到很神奇的问题...

    GD挂载正常,但是在AriaNG中下载文件永远显示下载失败。迷的是尽管显示下载失败,本地目录可以看到已经有了该文件,文件大小符合;同时也成功同步到了Google Drive指定文件夹,文件大小也符合。下载文件也是得花那么长时间,但下载完成的文件全部都是损坏的。这过程中一切运行顺利也没啥报错之类的。

    老哥有遇到过这种情况嘛?或者相应推测...

    1. Rat's
      @HYDROGEN

      这个没咋遇到过。

  7. 55555555

    泪奔啊~ 无法自动上传。。。上传脚本的位置,一直aria下载的目录都填写对了呀~

    1. Rat's
      @55555555

      重启什么的都做了?

  8. chrisy

    是不是把
    if [[ $? == '0' ]]; then

    rm -rf "$FileLoad";

    删除了就不会自动删除了?

    1. Rat's
      @chrisy

      是的。

      1. chrisy
        @Rat's

        为何删除了还是会删文件

        1. Rat's
          @chrisy

          需要重启aria2才生效。

          1. chrisy
            @Rat's

            重启aria2也不行 重启服务器也不行 有点搞不懂了

            1. Rat's
              @chrisy

              抱歉,我的锅,删除命令是多余的,本身就是用的mv命令,相当于把文件移走了,所以等于删除。

              1. chrisy
                @Rat's

                哈哈 好吧 那有办法换么?用copy?

                1. Rat's
                  @chrisy

                  你可以实践下。

  9. de

    确实比较好用,比原来用的稳定多了,原来老是上传大文件就失效,现在5G以内的文件,离线下载了20几部,都完整自动转到onedrive了。

  10. steve

    老哥,似乎onedrive上传有bug?文件稍微大点超过1个g就上传不了,不知道怎么回事,800多兆倒是可以上传。。

    1. Rat's
      @steve

      这个BUG没遇到过,可能我传的文件没那么大。

  11. 文骞

    如何重启重启Aria2?

    1. Rat's
      @文骞

      用的逗比那个脚本吗?直接使用service aria2 restart重启

  12. db

    在其他软件配置里里加on-download-complete可以吗?

    1. Rat's
      @db

      不能,只能在aria2配置文件里。

  13. 维他柠檬茶

    站长你好,怎么新建脚本呀

    1. Rat's
      @维他柠檬茶

      如果你是用ssh的话,touch,,nano,vi都行,不过你可以使用ftp登录vps(推荐WInSCP),鼠标右键新建文本就行了,然后把代码复制进去。

      1. 维他柠檬茶
        @Rat's

        好的,但是又遇到一个问题,就是我搭建aria2+onedrive做自动上传,昨天晚上链接成功了,今天就连不上了呢

        1. Rat's
          @维他柠檬茶

          指的aria2不能连接?你可以检查下浏览器密匙,或者重启下系统。

          1. 维他柠檬茶
            @Rat's

            好的,解决了,,但是又出了个问题,授权的时候出现
            chmod: cannot access ‘rcloneupload.sh’: No such file or directory

            1. Rat's
              @维他柠檬茶

              授权的时候,rcloneupload.sh路径填对。

              1. 维他柠檬茶
                @Rat's

                后台直接把权限改成777了可以吗

                1. Rat's
                  @维他柠檬茶

                  777也可以的,也可以通过FTP程序右键脚本设权限。

                  1. 维他柠檬茶
                    @Rat's

                    如何修改上传文件保存在onedrive的地址啊

                    1. Rat's
                      @维他柠檬茶

                      这个建议多看看博客其它上传教程。

  14. 老哥。感谢分享。搭好了可以用。但是每次换个浏览器要重新填一次rpc密匙。不然连接不上

    1. Rat's
      @凯

      换浏览器肯定要重新填的。

  15. P3TER

    给后面看教程的提个醒,aria2配置文件中的下载路径配置
    dir=/root/Download
    最后面不要有斜杠,否则会出现下面这样的日志:
    11/03 01:29:08 [NOTICE] Download complete: /root/Download//Photon.Setup.0.3.0.exe
    中间会出现2个斜杠的情况,这样参数传递给脚本就没办法处理。为此我懵逼了很久。
    还有我很想知道.aria2文件如何自动删除。

    1. Rat's
      @P3TER

      这个细节倒没注意过,不过脚本里下载路径的/别去掉就行,至于.aria2 文件是下载完成后,aria2c会自动删除。只是有人反映.aria2文件会有上传现象,所以加了个上传判断。

      1. P3TER
        @Rat's

        我的.aria2文件不会删除,后来我找到原因了
        现在toyo的aria2一键脚本现在把

        force-save=ture

        这个选项开启了,就会保留.aria2文件。注释掉它就会自动删除。
        现在终于完美了,下片去了。
        感谢大佬的教程!

  16. db

    被墙了??.....

    1. Rat's
      @db

      什么被墙?

      1. db
        @Rat's

        网站啊
        “找不到 www.moerats.com 的服务器 IP 地址”

        1. Rat's
          @db

          我博客被打了两天,然后上了cf的5秒盾,所以会有这种情况,现在关了。

          1. db
            @Rat's

            哦哦哦

  17. Arkulus

    站长您好,我的脚本遇到问题。aria2下载完成后应当调用GDupload.sh,但是日志显示"Could not execute user command: /root/GDupload.sh: No such file or directory"。我感到很困惑,on-download-complete=/root/GDupload.sh给出了绝对路径,这个问题很奇怪,不知我哪里搞错了什么。

    1. Rat's
      @Arkulus

      没给root可执行权限吧?

      1. Arkulus
        @Rat's

        给了,如果没给会提示Permission Denied。反复尝试无果,我选择重装系统,从新来一遍,这次全部成功了,万幸。

        1. Rat's
          @Arkulus

          脚本已更新,可以试试。

          1. Arkulus
            @Rat's

            好的,多谢~

            1. Arkulus
              @Arkulus
              该评论仅登录用户及评论双方可见
              1. Rat's
                @Arkulus

                这个不需要折腾,能用就行。

  18. 梨花菜
    if [ "$path" = "$downloadpath" ] && [ $2 -eq 1 ] then

    rclone=${filepath/#$downloadpath/$rclone} #替换路径
    有个小疑问,不是很明白这句话的作用 只有一个文件的时候,把rclone的挂载路径替换掉下载路径..

    1. Rat's
      @梨花菜

      替换路径后,就可以mv移动。

  19. powerdi

    我没有调参数,原文的方法1我尝试了是能够上传成功的,但是方法3我只能手动上传文件,但是不能自动上传文件,是什么原因呢?如何可以看上传的进度或者有什么日志吗?可能不能常上这个站,如果方便的话,开发者可以回复到我的邮箱吗?谢谢您!

    1. Rat's
      @powerdi

      说的是哪个教程?

      1. powerdi
        @Rat's

        onedrive+Aria2实现自动上传的,非自动脚本

        1. Rat's
          @powerdi

          能贴链接吗。这种脚本有好多。

  20. 一起走吧

    创建脚本在哪个位置啊 任意目录下面吗

    1. Rat's
      @一起走吧

      对,只要填的路径是对的就行。

  21. zhu

    脚本弄好了,配置文件也修改好了,aria2下载完文件并没有自动上传谷歌云,怎么办?

    1. Rat's
      @zhu

      配置好了后还需要重启Aria2。

      1. zhu
        @Rat's

        重启过了也是无反应呢,挂载也成功了

        1. Rat's
          @zhu

          如果授权什么的都做好了还是没反应的话,这里再给个上传脚本你(只需要修改开头3个参数):

          !/bin/bash

          path=$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 0

          fi
          while true; do #提取下载文件根路径,如把/data/a/b/c/d.jpg变成/data/a
          filepath=$path
          path=${path%/*};
          if [ "$path" = "$downloadpath" ] && [ $2 -eq 1 ] #如果下载的是单个文件

          then rclone move "$filepath" ${name}:${folder}/ exit 0

          elif [ "$path" = "$downloadpath" ] #文件夹

          then while [[ "`ls -A "$filepath/"`" != "" ]]; do rclone move "$filepath"/ ${name}:${folder}/"${filepath##*/}"/ --delete-empty-src-dirs done rm -rf "$filepath/" exit 0

          fi
          done

          1. zhu
            @Rat's

            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
            下载完看了下日志提示这个,要怎么解决呢

            1. Rat's
              @zhu

              这个建议你百度下#!/bin/bash: not found。

              1. zhu
                @Rat's

                bash的问题解决了,但是这个fi的问题不懂
                /root/GDupload.sh: line 20: syntax error near unexpected token `fi'
                /root/GDupload.sh: line 20: `fi'

                1. Rat's
                  @zhu

                  这个具体百度其实都有解决方法。

  22. John

    我看了另一篇你的关于onedrive的文章,已经解决

  23. John

    老大,这个 GDupload.sh脚本适用于OneDrive吗?我用GoogleDrive成功了,然后OneDrive没发自动上传

  24. miao

    下载时显示operation not permitted怎么办?种子可以下载,文件不行了

    1. Rat's
      @miao

      权限问题,你给予写入权限看看。或者检查下硬盘大小够不够。

  25. zzz

    很强大佬

  26. 清风竹影

    折腾了下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
    1. Rat's
      @清风竹影

      谢谢改进,一般直接放进去会有缓存问题,空间可能很快爆满,所以只能MV进去,加上网盘已经挂载了,就没使用rclone move,直接MV。还有OneDrive也可以挂载。看看这个:https://www.moerats.com/archives/491/。

      1. 清风竹影
        @Rat's

        个人觉得rclone其实并不太适合这个应用场景。
        不管是GD还是OD都有很多调用api上传的脚本或第三方软件,它们在上传时效果比rclone要好不少,比如gdrive可以实现ar下载的同时上传到GD。
        我修改的shell版onedrive在上传方面也比rclone好用。
        不必拘泥于rclone。

        1. Z
          @清风竹影

          你改的脚本一样会被杀,上传1.5G的iso,512的内存加上1G的swap,一样被杀

        2. 唯一度博客
          @清风竹影

          按照你的方法,提示Something went wrong, here is the API response:

          1. Rat's
            @唯一度博客

            这个大概API的问题。

        3. Rat's
          @清风竹影

          不常用的话api是够的,我有空看看你修改的脚本吧。

  27. chowvinhau

    大佬,下了十个种子测试 就一个漏了 帮我看看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

  28. Leon

    sh: 0: unknown operand,我又来了,这个问题又咋整啊,他不会复制。

    1. 清风竹影
      @Leon

      可以试下单独安装bash并替换,先安装再passwd文件。
      是上传脚本有问题,还是rclone有问题?

    2. Rat's
      @Leon

      得把脚本整个都复制进去。

      1. Leon
        @Rat's

        研究了半天,发现应该是因为busybox并不包含全部指令,顺便一提我用的是padavan路由器_(:з」∠)_有办法不用bash吗?

        1. Rat's
          @Leon

          这个路由器没玩过,你百度下。

  29. Maddox

    真的牛逼,要是能自动归类就好了。

    1. Rat's
      @Maddox

      目前只能修改成这样了,将就下。

  30. 荳荳荳啊

    离线了个小姐姐的视频后,谷歌把我网盘封了。妈耶!!! 我离线的是sexart。估计是版权问题吧。

    1. Rat's
      @荳荳荳啊

      运气这么差,我还没翻过车。