MENU

VPS+OneDrive网盘上传脚本+Aria2实现自动上传

March 23, 2019 • Read: 855 • 教程

本文部分内容引用于:VPS上传文件到OneDrive网盘脚本,可配合Aria2实现自动上传 ,博主的文章内容都很棒

之前写过一篇文章:宝塔 + Aria2+AriaNg+OneIndex 建立自动上传 OneDrive / 离线 BT 下载 / 在线观看 ,最后提到了OneIndex自带的自动上传功能,然而这个功能在使用过程中经常出现BUG——文件丢失,这里再介绍个OneDrive 上传脚本,几乎不会出现上传问题,很好用,由 萌咖 大佬制作,并将其适用于 Aria2 的自动上传。

说明

Github地址:https://github.com/0oVicero0/OneDrive

脚本特性:脚本支持文件夹上传,支持获取文件的匿名直链,且只适用于 OneDrive 非个人版。

安装

  • 安装 curl ,用于访问 API
#Ubuntu和Debian系统
apt-get install -y curl

#Centos系统
yum install curl -y
  • 运行命令安装脚本
#为了方便小白,本脚本内置萌咖大佬永久有效的应用参数,可以直接使用,如果你不放心可以自己获取参数,不过可能会遇到很多坑,建议直接使用脚本默认的参数
wget --no-check-certificate -qO- "https://raw.githubusercontent.com/0oVicero0/OneDrive/master/OneDrive.sh" |bash
  • 运行账号认证程序

运行命令 onedrive -a ,将返回的网址复制到浏览器打开,再登陆你的 OneDrive for Business 账号,登陆成功后复制地址栏中的地址(复制包括 localhost 的所有链接地址),粘贴到 SSH 客户端里,敲回车键即可。

如果返回以下字段: It seems like we have a refresh token, so we are ready to go ,那就恭喜你,设置成功!

如果你遇到 bash: onedrive: command not found 错误,则需要找到 /usr/local/etc/OneDrive 文件夹,修改onedrive和onedrive-d脚本,在第二行都加上 export PATH=/usr/local/bin:$PATH 代码,再保存就行了。

使用

  • 使用命令
onedrive --help
 
#####################################################################
Usage: onedrive [OPTIONS] file1 [file2...]
       onedrive-d folder
 
Options:
  -d, --debug        Enable debug mode
  -a, --authorize    Run authorization process
  -f, --folder       Upload files into this remote folder
  -c, --creat        Creat remote folder."
                     Directory names are separated with a slash, e.g.
                     rootFolder/subFolder
                     Do NOT use a trailing slash!
  -h, --help         Show this help
  -r, --rename       Rename the files during upload
                     For each file you specify you MUST also specify
                     the remote filename as the subsequent parameter
                     Be especially careful with globbing!
  -s, --silent       Silent mode for use in crontab scripts.
                     Return only exit code.
  -ls,--list         Show the itmes in this directory.
  -l, --link         Show the file share link.
      
#####################################################################
  • 命令示范

如果我们要上传 /root 文件夹里面的 moerats.txt ,使用命令:

#此命令默认上传到OneDrive根目录
onedrive '/root/moerats.txt'

#如果上传到指定文件夹,就需要加-f参数
onedrive -f RATS '/root/moerats.txt'  #上传到OneDrive根目录的RATS文件夹
onedrive -f RATS/RATS '/root/moerats.txt'  #上传到OneDrive根目录RATS文件夹里的RATS文件夹

如果我们要将 /root 文件夹及里面的文件夹和文件一起上传,使用命令:

#此命令默认上传到OneDrive根目录
onedrive-d '/root'

#如果上传到指定文件夹,就需要加-f参数
onedrive-d -f RATS '/root'  #上传到OneDrive根目录的RATS文件夹
onedrive-d -f RATS/RATS '/root'  #上传到OneDrive根目录RATS文件夹里的RATS文件夹

如果我们想直接查看 OneDrive 网盘目录的文件,使用命令:

#此命令只查看根目录文件
onedrive -l
#如果我们要查看根目录root文件夹里的文件
onedrive -l /root

Aria2自动上传

原理是当下载完后 Aria2 会给脚本传 3 个参数 $1$2$3 分别为 gid 、文件数量、文件路径。我们对文件路径这个字符串处理一番就可以达到目的了。

新建脚本文件 rcloneupload.sh ,并复制下面代码:

#!/bin/bash

GID="$1";
FileNum="$2";
File="$3";
MaxSize="15728640"
RemoteDIR="";  #上传到Onedrive的路径,默认为根目录,如果要上传到指定目录,方法看文章最后面。
LocalDIR="/home/www/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
    if [[ $(dirname "$File") == $(readlink -f $LocalDIR) ]]; then
      ONEDRIVE="onedrive";
    else
      ONEDRIVE="onedrive-d";
    fi
    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
    if [[ -n "$RemoteDIR" ]]; then
      Option=" -f $RemoteDIR";
    else
      Option="";
    fi
    EXEC="$(command -v $ONEDRIVE)";
    if [[ -z "$EXEC" ]]; then return; fi
    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" -ge "$MaxSize" ]]; then
        echo -ne "\033[33m$File \033[0mtoo large to spik.\n";
        return;
      fi
      eval "${EXEC}${Option}" \'"${FileLoad}"\';
      if [[ $? == '0' ]]; then
        rm -rf "$FileLoad";
      fi
    fi
  fi
  IFS=$IFS_BAK
}
LoadFile;

授权 chmod +x rcloneupload.sh ,然后再到 Aria2 配置文件中加上一行 on-download-complete=/root/rcloneupload.sh 即可,后面为脚本的路径。最后重启 Aria2 生效。

如果你想上传到指定的文件夹,修改如下:

#上传到Onedrive里的RATS目录,参数改为:RemoteDIR="RATS"; 
#上传到Onedrive里的RATS目录里的RATS目录,参数改为:RemoteDIR="RATS/RATS";

如果你觉得上传速度较慢,可以编辑 /usr/local/etc/OneDrive/onedrive.cfg ,修改 threads 线程数,默认 2

#这里提供个快速修改线程数的命令,这里默认修改为5,建议别太高!
sed -i "s#max_upload_threads=2#max_upload_threads=5#g" '/usr/local/etc/OneDrive/onedrive.cfg'
Last Modified: March 31, 2019
Archives QR Code Tip
QR Code for this page
Tipping QR Code