Skip to content

milin2436/oneshow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

oneshow 一个简单的onedrive第三方命令行工具

功能

1.支持多帐号,可用su命令进行当前用户切换
2.支持通过ls命令,浏览网盘内的文件
3.支持文件的批量下载和上传,支持断点继传或下载
4.支持对文件搜索
5.支持单个移动文件或文件夹
6.删除文件到回收站
7.以web方式浏览和下载网盘文件,实验阶段
8.以webdav方式,挂载到设备,不支持修改文件和增加文件
9.支持linux和windows系统,其他设备请自行构建
10.支持通过配置文件,自定义使用自己的onedrive API
11.支持webdav挂载时,通过配置加速地址,以达到加速下载onedrive文件的目的
12.支持可断点下载的URL资源,直接上传到网盘,无需下载到本地后再上传

使用

直接执行oneshow,查看支持的命令,支持使用-h查看子命令的详细使用方法。可自建 .oneshow.json 配置文件,配置加速下载和使用自己的onedrive API功能。

执行oneshow回车

HELP ===========================
oneshow version v0.1.8 build time:2022-03-27 11:31:32 
================================


rm              remove a file or dir to trash

su              swich to other logined user

search          search files by key

ls              list onedrive path

users           list login users

u               upload a file or dir to onedrive

web             run this http super serivce (beta version)

webdav          run webdav service for onedirve (only read)(beta version)

info            show onedrive info

auth            get a auth for new user

saveUser        save current user to name

who             show current user name

mv              move file to other dir

d               download a file or dir or URL to local


首先通过oneshow auth增加一个用户的帐号配置,该操作请在桌面环境执行以及事先安装好浏览器,用户在浏览器上操作同意受权oneshow应用后,保存登录信息的文件会自动生成和保存在用户目录的~/.config/oneshow/.od.json文件中,其中~/.config/oneshow/用户的oneshow配置目录(所有配置皆放在这个目录下),然后通过oneshow saveUser alias,就保存了一个别名为alias的配置文件,当要使用这个账户时候通过oneshow su alias,切换到这个用户,主要通过配置目录下的.od_cur_user.id文件来指定当前用户,可通过oneshow who来查看当前用户是谁。

其他命令的用法,比如查询ls子命令帮助,可通过执行 oneshow ls -h 查看命令的详细使用方法。

usage: ls [OPTION] path

list onedrive path

-h  print help

-l  list files detail

其中path参数一定要为onedrive全路径,例如查询根目录,执行oneshow ls -l /

查看当前用户网盘容量和使用情况使用:

./oneshow info

查看当前使用的用户的别名:

./oneshow who

可通过环境变量oneshowuser来使用某个特定用户的onedrive,而忽略从.od_cur_user.id读取当前用户信息。比如存在u1用户,打印他的网盘配额信息,在linux下可使用命令:

oneshowuser=u1 ./oneshow info

删除目标文件/test,放入到回收站使用:

./oneshow rm /test

上传/test下所有文件到/other目录使用:

./oneshow u -s /test -f /other

下面命令是下载/test下的所有文件,到当前目录,可用-d ”下载目录“,来指定下载到目标目录:

./oneshow d /test

搜索网盘内关键字为key的所有名录和文件,加-d可显示文件或目录的全路径:

./oneshow search -d key

打开web服务,绑定到127.0.0.1:4444,通过访问,http://127.0.0.1:4444/vfs 浏览网盘和下载文件:

./oneshow web  -u 127.0.0.1:4444

开启一个webdav服务,绑定到127.0.0.1:4444,ubuntu下,打开文件管理的连接到服务器,通过dav://127.0.0.1:4444/ 就可将onedrive挂载到本地。该功能不支持上传功能和移动目录,支持设置密码认证,为了信息安全在远程启用webdav服务时候请开启https协议和加入帐号认证,浏览和下载、直接播放视频等功能经测试没有什么大问题。

./oneshow webdav -u 127.0.0.1:4444 -ss user_alias

下面命令为开启一个TLS通道webdav服务,认证的用户和密码为username、password,证书和密钥文件为test.crt、test.key,绑定的服务端口为4444,ss参数为指定的username,如果将多个用户挂载到同一个webdav进程以";"隔开多个用户,例如 -ss "u1;u2;u3"这样的形式,这样u1用户的webdav资源路径就为/u1

./oneshow webdav -user username -passwd password -c test.crt -k test.key -u :4444 -ss "u1;u2;u3"

由于在中国境内,没有onedrive服务器,访问国际版时速度非常不稳定,故提供一个加速接口功能。思路为将onedrive的下载链接,通过参数传递给加速的中间服务器,以达到加速目的。以我个人的经验,移动用户的最佳实践为cloudflare workers加上优选cloudflare CDN ip 这个方案非常稳定,在线看4k视频没有什么问题。oneshow程序的配置文件为.oneshow.json,请务必将该文件建在用户配置目录下。 配置文件为json格式,accelerated_api为加速地址,acceleration为加速开关,只有当acceleration为true而且accelerated_api不为空的情况下,才会生效加速功能。

{
    "accelerated_api":"https://exsample.com/fetch?url=",
    "acceleration":false
}

可通过oneshow程序配置文件.oneshow.json,使用自己的onedrive API。比如使用rclone的API 配置文件

{
    "accelerated_api":"https://exsample.com/fetch?url=",
    "acceleration":false,
    "client_id":"b15665d9-eda6-4092-8539-0eec376afd59",
    "client_secret":"qtyfaBBYA403=unZUP40~_#",
    "scope":"Files.Read Files.ReadWrite Files.Read.All Files.ReadWrite.All offline_access Sites.Read.All",
    "redirect_uri":"http://localhost:53682/"
}

构建

建议在linux下进行构建代码,下载代码后直接进入main文件夹执行make即可。 发布的二进制程序提供了linux和windows版本,但是最近的更改都没有在windows上进行测试。 对于mac用户,请自己进行构建。

版权声明

该软件使用rclone部分代码,基于MIT协议做出该声明,这部分代码用于解析onedrive api返回的json数据对应的结构体。使用的代码为 https://github.com/rclone/rclone/blob/master/backend/onedrive/api/types.go rclone项目地址: https://github.com/rclone/rclone/