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新用户注册送100美元/16个机房按小时计费,支持支付宝,【点击查看】。
最后修改:2018 年 12 月 20 日 06 : 20 PM

发表评论

123 条评论

  1. 维他柠檬茶

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

    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
                      @维他柠檬茶

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

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

    1. Rat's
      @凯

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

  3. 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文件。注释掉它就会自动删除。
        现在终于完美了,下片去了。
        感谢大佬的教程!

  4. db

    被墙了??.....

    1. Rat's
      @db

      什么被墙?

      1. db
        @Rat's

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

        1. Rat's
          @db

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

          1. db
            @Rat's

            哦哦哦

  5. Arkulus

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

    1. rain
      @Arkulus

      老哥这个问题怎么解决的呢,我这边也是同样提示找不到这个文件,已经给了root 777权限

      1. Rat's
        @rain

        检查下编码?我给个解决方法你,首先安装一个工具,使用命令:
        CentOS系统
        yum install dos2unix -y

        Debian/Ubuntu系统
        apt install dos2unix -y

        然后dos2unix /root/GDupload.sh,差不多就可以了

    2. 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

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

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

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

    1. Rat's
      @梨花菜

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

  7. powerdi

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

    1. Rat's
      @powerdi

      说的是哪个教程?

      1. powerdi
        @Rat's

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

        1. Rat's
          @powerdi

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

  8. 一起走吧

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

    1. Rat's
      @一起走吧

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

  9. 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

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

  10. John

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