说明:我们从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 ID
、Secret
、Reply URL
,均需要在/usr/local/etc/OneDrive/onedrive.cfg
文件里修改,参数获取看下面,当然你也可以不用管,直接进行步骤3
。
2、获取参数
先访问Microsoft Azure Management Portal,然后点击左侧菜单栏中的Azure Active Directorg
,选择应用注册,再点击页面上方的新应用程序注册。
输入名称如:OneDrive for Linux
,应用程序类型选择Web应用/API
,填入登陆URL
:https://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