OneDrive Free Client 是一款开源的 Linux 端 OneDrive 文件同步工具(点此直达项目地址),支持 OneDrive 个人版和 OneDrive 商业版,博主试用了一下,效果不错。本文详细介绍如何在 Ubuntu 18.04 手动安装 OneDrive Free Client 实现本地与 OneDrive 文件同步。以下操作是在 root 账号下进行的,非 root 账号需提升到 root 权限。

安装 OneDrive Free Client

安装依赖

OneDrive Free Client 依赖 libcurl 、SQLite 3 及 Digital Mars D Compiler (DMD) ,使用如下命令安装依赖:

apt install build-essential -y && apt install libcurl4-openssl-dev libsqlite3-dev libnotify-dev -y

安装 DMD :

curl -fsS https://dlang.org/install.sh | bash -s dmd

以上脚本执行完成后终端会有如下类似信息输出:

Run `source ~/dlang/dmd-2.085.0/activate` in your shell to use dmd-2.085.0.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run `deactivate` later on to restore your environment.

配置编译环境

编译环境需要至少 1GB 内存和 1GB 的 swap 交换空间,swap 空间不足会导致编译报错。如果 swap 空间不够,可使用如下命令增加 swap 空间:

dd if=/dev/zero of=/var/swap bs=1024 count=1024000  #增加 swap分区,容量为1 GB
mkswap /var/swap   #设置交换文件
swapon /var/swap   #立即激活启用交换分区
free -m            #查看内存和交换空间

如需设置开机自动挂载,在 /etc/fstab 中增加以下一行即可:

/var/swap swap swap defaults 0 0

内存和 swap 满足要求后再配置 dmd 编译环境,使用如下命令配置 dmd 编译环境。注意,在命令执行前请将 dmd 的版本替换为实际安装版本,亦即上文脚本执行完终端输出的版本:

source ~/dlang/dmd-2.085.0/activate

编译并安装

首先克隆源码:

git clone https://github.com/abraunegg/onedrive.git && cd onedrive

编译安装 OneDrive Free Client :

./configure && make clean; make && make install

退出 dmd 编译环境:

deactivate

配置 OneDrive Free Client

应用程序授权

首次运行 OneDrive Free Client 会提示对 OneDrive 进行授权,终端中输入以下命令运行软件并开始授权:

onedrive

命令执行后终端返回信息如下:

Authorize this app visiting:
https://.......
Enter the response uri: 

复制终端中的 url 链接到 IE 浏览器中打开,登陆 Microsoft 帐户并授予应用程序访问文件的权限。获得许可后浏览器会被重定向到一个空白页面,将空白页的 url 复制到终端中并回车,以完成应用程序授权。

测试应用程序

使用 --dry-run 选项测试应用程序,该选项下应用程序不会下载、上传或删除任何文件,但应用程序将显示“会发生什么”:

onedrive --synchronize --verbose --dry-run

命令执行后终端返回以下类似信息:

DRY-RUN Configured. Output below shows what 'would' have occurred.
Loading config ...
Using Config Dir: /home/user/.config/onedrive
Initializing the OneDrive API ...
Opening the item database ...
All operations will be performed in: /home/user/OneDrive
Initializing the Synchronization Engine ...
Account Type: personal
Default Drive ID: <redacted>
Default Root ID: <redacted>
Remaining Free Space: 5368709120
Fetching details for OneDrive Root
OneDrive Root exists in the database
Syncing changes from OneDrive ...
Applying changes of Path ID: <redacted>
Uploading differences of .
Processing root
The directory has not changed
Uploading new items of .
OneDrive Client requested to create remote path: ./newdir
The requested directory to create was not found on OneDrive - creating remote directory: ./newdir
Successfully created the remote directory ./newdir on OneDrive
Uploading new file ./newdir/newfile.txt ... done.
Remaining free space: 5368709076
Applying changes of Path ID: <redacted>

创建配置文件

OneDrive Free Client 的配置文件默认存放在 ~/.config/onedrive/config ,使用如下命令创建配置文件:

cat > ~/.config/onedrive/config << EOF
sync_dir            = "/home/OneDrive"
skip_dir            = ""
skip_file           = "~*"
skip_dotfiles       = "false"
skip_symlinks       = "false"
monitor_interval    = "45"
min_notify_changes   = "5"
log_dir             = "/var/log/onedrive/"
EOF

以上参数的具体含义为:

  • sync_dir:要同步的目录,本文以 /home/OneDrive 目录为例
  • skip_dir:同步期间将跳过的目录
  • skip_file:同步期间将跳过的文件
  • skip_dotfiles:在同步期间将跳过任何 .files 或 .folders
  • skip_symlinks:同步期间将跳过符号链接的任何文件或目录
  • monitor_interval:监视进程处理本地和远程更改的时间间隔(秒)
  • min_notif_changes:触发​​桌面通知的最小挂起传入更改数

执行以下命令显示应用程序配置:

onedrive --display-config

终端中返回信息如下:

onedrive version                    = v2.2.6-6-g6b8b51a
Config path                         = /root/.config/onedrive
Config file found in config path    = true
Config option 'check_nosync'        = false
Config option 'sync_dir'            = /home/OneDrive
Config option 'skip_dir'            = 
Config option 'skip_file'           = ~*
Config option 'skip_dotfiles'       = false
Config option 'skip_symlinks'       = false
Config option 'monitor_interval'    = 45
Config option 'min_notify_changes'   = 5
Config option 'log_dir'             = /var/log/onedrive/
Selective sync configured           = false

可见之前设置的配置文件已经生效。

使用 OneDrive Free Client

终端中运行 onedrive --help 查看所有可用命令。本文只简单举几个例子。

同步所有文件及文件夹

使用如下命令同步所有文件及文件夹:

onedrive --synchronize

选择性同步

在某些情况下,可能需要在 OneDrive 目录下同步单个目录而无需更改程序配置,则可使用 --single-directory 选项进行选择性同步。例如,如果要同步的目录完整路径为 /home/OneDrive/mydir ,则具体命令为:

onedrive --synchronize --single-directory 'mydir'

此命令执行后只对 /home/OneDrive/mydir 目录进行同步。

单向下载同步

在某些情况下,可能仅需要从 OneDrive 下载,使用 --download-only 选项进行单向下载同步:

onedrive --synchronize --download-only

单向上传同步

在某些情况下,可能仅需要将文件上传到 OneDrive ,使用 --upload-only 选项进行单向上传同步:

onedrive --synchronize --upload-only

提高日志记录级别

当运行同步时,可能希望看到关于同步的进度和操作的详细信息,使用 --verbose 选项提高日志记录级别:

onedrive --synchronize --verbose

更多的使用方法请参考官方文档,文档地址:
https://github.com/abraunegg/onedrive

通过以上步骤便可在 Ubuntu 18.04 手动安装 OneDrive Free Client 实现本地与 OneDrive 文件同步,本文结束。