温馨提示:本站所有内容均来源网络,请自行区分好坏。

VPS上传文件到OneDrive网盘脚本,可配合Aria2实现自动上传

说明:我们从VPS上传文件到OneDrive网盘的方法很多,包括Rclone挂载,OneIndex程序的上传功能,不过2个在上传的时候都还是有点BUG,前者会出现丢文件的情况,后者也会出现上传失败,都不是很理想,这里博主再介绍个OneDrive上传脚本,几乎不会出现上传问题,很好用,由萌咖大佬制作,热心的lm317379829大佬修改,将其适用于Aria2的自动上传,这里说下具体操作。

方法

Github地址:https://github.com/iiiiiii1/OneDrive

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

1、安装脚本
安装curl,用于访问API

#Ubuntu和Debian系统
apt-get install -y curl

#Centos系统
yum install curl -y

运行命令安装脚本:

#为了方便小白,本脚本内置萌咖大佬永久有效的应用参数,可以直接使用,如果你不放心可以自己获取参数,不过可能会遇到很多坑,建议直接使用脚本默认的参数
wget --no-check-certificate -q -O /tmp/OneDrive.sh "https://raw.githubusercontent.com/iiiiiii1/OneDrive/master/OneDrive.sh" && chmod +x /tmp/OneDrive.sh && bash /tmp/OneDrive.sh

本脚本需要三个参数Client IDSecretReply URL,均需要在/usr/local/etc/OneDrive/onedrive.cfg文件里修改,参数获取看下面,当然你也可以不用管,直接进行步骤3

2、获取参数
先访问Microsoft Azure Management Portal,然后点击左侧菜单栏中的Azure Active Directorg,选择应用注册,再点击页面上方的新应用程序注册。

输入名称如:OneDrive for Linux,应用程序类型选择Web应用/API,填入登陆URLhttps://login.microsoftonline.com/,再点击创建。

然后点击刚刚创建的应用程序,复制应用程序ID,即脚本需要的Client ID参数,再点击左上角的设置。

然后进行如下修改:

#点击右边的回复URL,将其修改为:https://onedrive.live.com/about/business/,即脚本所需要的Reply URL参数。
#点击所需权限,点击Windows Azure Active Directory确认是否已选中Sign in and user profile,如果没有则选中并点击完成。
#点击上方的添加,点击选择API,选中Office 365 SharePoint Online,并点击选择。在选择权限中选中Read user files 和Read and write user files,并点击选择。点击完成按钮,并关掉此小窗口。
#点击密钥,填入密钥描述,如:OneDrive,选择年限1年,点击保存,再复制密匙,即脚本所需要的Secret参数。

不过这里说下密匙(Secret参数)填写的一个坑,由唯一度博主填平。就是当我们获取到带+号的密匙时候,我们需要使用编码符号,把+改成%2B,然后再填入脚本里,不然最后会出现Something went wrong, here is the API response的错误,导致验证失败。

3、运行账号认证程序
运行命令onedrive -a,将返回的网址复制到浏览器打开(此处需要梯子),再登陆你的OneDrive for Business账号,登陆成功后复制地址栏中的地址,并提取code的字段(就是code=后面至&前面),粘贴到SSH客户端里,敲回车键即可。
请输入图片描述
如果返回以下字段:It seems like we have a refresh token, so we are ready to go,那就恭喜你,设置成功!

使用

1、使用命令

onedrive --help

Usage: onedrive [OPTIONS] file1
       onedrive-d floder

Options:
  -d, --debug        Enable debug mode
  -a, --authorize    Run authorization process
  -f, --folder       Upload files into this remote folder
  -u, --update       Upload files into this remote folder after aria2 download complete
  -c, --creat        Creat remote folder.
                     Directory names are separated with a slash,
            echo  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.

2、命令示范
以下命令均需要在/usr/local/etc/OneDrive文件夹进行,先使用命令:

cd /usr/local/etc/OneDrive

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

#此命令默认将moerats.txt文件上传到OneDrive根目录
./onedrive /root/moerats.txt
#此命令会将文件夹和文件一起上传,但只上传文件夹里的moerats.txt文件
./onedrive -f /root/moerats.txt

请输入图片描述

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

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

请输入图片描述

Aria2自动上传

 

上传代码如下:

#!/bin/bash
num="$2"
path="$3" 
downloadpath='/home' #下载目录

if [ $num -eq 0 ]
    then
      exit 0
fi

function getdir(){
IFS=$'\n';for file in `ls "$1"`
    do
        if [ -d "$1/$file" ]  
        then
            getdir "$1/$file"
        else
            if [ "${1%/*}" = "$downloadpath" ] && [ $num -eq 1 ]
            then
                /usr/local/etc/OneDrive/onedrive "$1"
            elif [ $num -eq 1 ] 
            then
                /usr/local/etc/OneDrive/onedrive "$1/$file"
            else
                /usr/local/etc/OneDrive/onedrive -u "$downloadpath" "$1/$file"
                fi
        fi
    done
}

while true; do
filepath=$path 
path=${path%/*};   
if [ "$path" = "$downloadpath" ] 
    then  
      getdir "$filepath"
      if [ -d $filepath ]
      then
        rm -r "$filepath"
      else
        rm  "$filepath"
      fi
      echo 3 > /proc/sys/vm/drop_caches
      swapoff -a && swapon -a
      exit 0
fi
done

 

 

来源:Rat’s Blog

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址