如何在Linux上同步OneDrive Business / Office 365?
Microsoft OneDrive Business / Office 365 Pro提供1 TB的云存储,但遗憾的是从未有过在Linux上同步它的方法。
目前实验性onedrive-d是一个开源程序,只能同步个人OneDrive帐户,因为它不接受Microsoft Sharepoint链接。 以下是使用GoodSync for Linux同步OneDrive Business / Office 365的方法,该方法可供个人免费使用。
-
在Linux机器上安装合适的版本,例如:
./goodsync-linux-x86_64-release.run
对于GoodSync Connect设置和GsServer Web UI,请回答n o。
- 在Web浏览器中打开OneDrive。 选择右下方的“返回Classic OneDrive”。
- 您的浏览器中的url现在如下所示:
https://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents/Forms/All.aspx
office365://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents
并根据它获取您的同步链接 ,该链接将为office365://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents
。 -
在您家中的.goodsync子文件夹中创建一个新文件:
gedit ~/.goodsync/jobs.tix
-
在文件中输入以下代码并保存:
Name = "OneDrive_Sync" Side1 = Dir = Side2 =Url = "put_your_syncing_link_here" UserID = "put_your_OneDrive/Office365_Bussiness_email_here" Dir = Direction = 0 ExcludeHidden = No ExcludeSystem = No DetectMovesAndRenames = Yes LinksOption = 1 ExcludeEmptyFolders = No LimitChangesPercent = 100 AutoResolveConflicts = 3 DetectMovesAndRenames = YesUrl = "file:///your_home_folder/one_drive_folder" -
开始同步过程:
gsync sync "OneDrive_Sync"
-
在此步骤中,您的Web浏览器将打开OneDrive / Office 365页面,并要求您授权允许货物同步访问您的帐户。 输入凭据后,同步将开始。
限制:Microsoft不允许长度超过270个字符的URL请求,因此GoodSync不能同步具有长路径名的文件。
请享用!
虽然onedrived
的原始和常用的onedrived
工具仍然不支持OneDrive for Business,但只支持OneDrives。 然而,在derit060的GitHub上有一个这个项目的分支 ,它为Business客户端提供了一些工作(但仍然有缺陷)的实现。
警告:当您使用此方法时,我强烈建议您始终通过https://www.office.com在线检查文件来validation文件是否已正确同步,和/或使用本页末尾显示的包装器脚本至少使用桌面通知获知任何错误!
有时onedrived似乎无法获取某些更改或正确上传它们,使OneDrive处于(部分)不同步状态。 它也可能由于某种原因而与自身产生合并冲突,并通过在括号中添加主机名和可选的数字来在本地重命名文件。 遗憾的是,没有关于错误的通知,但您可以在日志文件中看到这些条目。
如果发生这种情况,您可以尝试再次同步相应的文件,例如触摸它们或重命名它们或它们所在的文件夹。
提示:似乎onedrived库经常出现问题,尤其是直接保存在OneDrive根目录中的文件。 最好将所有文件放在子目录中,而不是直接将它们转储到OneDrive文件夹中。
虽然这听起来很愚蠢,但我也注意到,通过OneDrive Web客户端上传文件并等到它们同步回本地文件夹(可能需要几分钟)而不是创建或复制/移动它们似乎会导致更少的问题本地。 无论是实用还是完全无效,OneDrive的目的都取决于您自己的决定……
有关完整的安装说明,请参阅项目的自述文件,但这里有一个简短的摘要:
安装
-
确保没有安装其他版本的
onedrived
(或onedrive-d
)。 -
安装依赖包:
sudo apt install build-essential python3-dev libssl-dev inotify-tools python3-dbus libdbus-1-dev libdbus-glib-1-dev
-
从官方网站https://ngrok.com/download下载最新的Linux
ngrok
客户端。 来自Ubuntu存储库的ngrok-client
软件包太旧,不符合要求。
解压缩下载的ngrok-stable-linux-amd64.zip
存档。 它包含一个ngrok
二进制文件,您应将其放在$PATH
上的某个位置,例如放入/usr/local/bin/
。
注册ngrok可能不是必需的。 -
使用
pip3
从GitHub安装onedrived
Python3应用程序:sudo -H pip3 install git+https://github.com/derrix060/onedriveClient.git
-
(可选)为
onedrived
配置日志文件位置,如果有任何不正常的情况,您可以检查问题,例如:onedrived-pref config set logfile_path ~/.config/onedrived/onedrived.log
帐户设置和驱动器配置
安装成功后,您必须配置您的帐户和驱动器:
-
通过运行以下命令,使用交互模式添加OneDrive for Business帐户:
onedrived-pref account add -b
交互式向导将要求您两次在浏览器中打开链接,您必须使用Microsoft Business帐户授权该应用程序。
在确认授权回到交互式向导后,它会要求您粘贴重定向到的URL。 请按照说明进行操作并按照命令给出的说明进行操作。 -
通过检查以下命令的输出来validation帐户是否已成功添加。 它看起来应该类似,并列出您登录的帐户:
$ onedrived-pref account list All OneDrive accounts associated with user "YOUR_UBUNTU_USERNAME": # Account ID Owner Name Email Address Profile Type --- ------------------------- ------------- -------------------- -------------- 0 YOUR_PERSONAL_ACCOUNT_ID YOUR_NAME YOUR_BUSINESS_EMAIL Business
-
通过运行以下命令在交互式命令模式下配置驱动器
onedrived-pref drive set
您将看到所有驱动器的列表,并被要求输入要添加到本地配置的驱动器的行号。
然后,您必须指定要用作根文件夹的本地目录,以便与驱动器同步。 您只需按Enter键即可使用默认的~/OneDrive
。 如果路径不存在,则将创建该路径。 对于要使用的忽略文件的路径也是如此,只需按Enter键 ,它将使用默认的~/.config/onedrived/ignore_v2.txt
并在必要时创建它。 -
检查以下命令的输出以显示有关所有可用和已配置驱动器的信息。 它应该显示您刚刚设置的
Drives that have been set up
的标题Drives that have been set up
下使用正确的设置:onedrived-pref drive list
启动守护进程
现在您的驱动器已配置,您需要尝试启动onedrived
守护程序。 我建议首先在调试模式下启动它,以防万一你会错过任何问题。 这将在前景中开始:
onedrived start --debug
如果一切正常并且命令没有崩溃并退出,请尝试将一些文件放在本地OneDrive文件夹中,看看它是否同步。 您可能应该通过访问https://www.office.com上的OneDrive Web应用程序并检查您在本地添加的文件是否出现在那里来validation这一点。
您可以按Ctrl + C再次退出终端中的onedrived
进程。
要正常启动onedrived
,作为后台守护程序,运行它:
onedrived start
您应该将此命令添加到启动应用程序中,以便每次登录时自动启动。请参阅如何在登录时自动启动应用程序? 为了那个原因。
用于错误通知的包装器
如果您希望在onedrived
记录错误(例如文件同步失败)时获得桌面通知,这里是一个包装脚本,它实时解析日志文件并使用notify-send将它们显示给您。
您可以启动不带参数的包装器脚本(或将其放在自动启动应用程序中)而不是onedrived start
命令。
#!/bin/bash LOGFILE=~/.config/onedrived/onedrived.log ICON_START=weather-overcast ICON_STOP=weather-few-clouds ICON_ERROR=weather-severe-alert onexit () { onedrived stop notify-send -i "$ICON_STOP" "OneDrive" "Wrapper stopped" echo "onedrived-wrapper stopped" } trap onexit EXIT onedrived stop echo "---" >> "$LOGFILE" onedrived start || { echo "Failed to start onedrived!" exit 1 } notify-send -i "$ICON_START" "OneDrive" "Wrapper started" echo "Monitoring onedrived.log for error messages..." tail -n 1 -F --pid="$(pgrep -f "onedrived start")" "$LOGFILE" | while read LINE ; do echo "$LINE" if MESSAGE="$(grep -Pio '(?<=ERROR: ).*' <<< "$LINE")" ; then notify-send -i "$ICON_ERROR" "OneDrive Error" "$MESSAGE" fi done
Ubuntu 18.04及更高版本
在Ubuntu 18.04及更高版本的默认Ubuntu存储库中有一个OneDrive客户端。 OneDrive是微软的云存储系统。 此程序包为命令行客户端提供专门与OneDrive云存储同步的function。
安装它:
sudo apt install onedrive
首次运行时,它会要求您使用链接进行身份validation。 身份validation后,您可以使用systemctl --user enable onedrive
启用deamon systemctl --user enable onedrive
,然后使用systemctl --user start onedrive
。 可以在manpage man onedrive
找到进一步的解释。 设置非常简单,只需要大约五分钟。