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

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

  2. miao

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

    1. Rat's
      @miao

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

  3. zzz

    很强大佬

  4. 清风竹影

    折腾了下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是够的,我有空看看你修改的脚本吧。

          1. @Rat's

            大佬,请问层主说的第二个问题有办法解决吗?20G的可用空间实际只能用10G感觉好浪费啊。下载一个大文件,自动上传的时候服务器很容易就爆了。我应该如何修改脚本呢?谢谢!

            1. Rat's
              @风

              就是把系统本身的mv移动命令,改成rclone自带的移动命令。rclone move

              1. @Rat's

                请问是指的EXEC="$(command -v mv)"改为EXEC="$(command -v rclone move)"吗?

                1. Rat's
                  @风

                  不是,改最后的移动命令就行,大概是将eval "${EXEC}${Option}" '"${FileLoad}"\' "${RemoteDIR}";改成eval rclone moveto '"${FileLoad}" DriveName:Folder;后面的为配置的name和网盘文件夹,我没试过,你可以自己折腾看看。看下rclone官方文档

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

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

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

  7. Maddox

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

    1. Rat's
      @Maddox

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

  8. 荳荳荳啊

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

    1. Rat's
      @荳荳荳啊

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