如何在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的方法,该方法可供个人免费使用。

  1. 在Linux机器上安装合适的版本,例如:

    ./goodsync-linux-x86_64-release.run 

    对于GoodSync Connect设置和GsServer Web UI,请回答n o。

  2. 在Web浏览器中打开OneDrive。 选择右下方的“返回Classic OneDrive”。
  3. 您的浏览器中的url现在如下所示: https://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents/Forms/All.aspx office365://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents并根据它获取您的同步链接 ,该链接将为office365://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents
  4. 在您家中的.goodsync子文件夹中创建一个新文件:

     gedit ~/.goodsync/jobs.tix 
  5. 在文件中输入以下代码并保存:

      Name = "OneDrive_Sync" Side1 =  Dir =  Url = "put_your_syncing_link_here" UserID = "put_your_OneDrive/Office365_Bussiness_email_here"   Side2 =  Dir =  Url = "file:///your_home_folder/one_drive_folder"   Direction = 0 ExcludeHidden = No ExcludeSystem = No DetectMovesAndRenames = Yes LinksOption = 1 ExcludeEmptyFolders = No LimitChangesPercent = 100 AutoResolveConflicts = 3 DetectMovesAndRenames = Yes  
  6. 开始同步过程:

     gsync sync "OneDrive_Sync" 
  7. 在此步骤中,您的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的目的都取决于您自己的决定……

有关完整的安装说明,请参阅项目的自述文件,但这里有一个简短的摘要:

安装

  1. 确保没有安装其他版本的onedrived (或onedrive-d )。

  2. 安装依赖包:

     sudo apt install build-essential python3-dev libssl-dev inotify-tools python3-dbus libdbus-1-dev libdbus-glib-1-dev 
  3. 从官方网站https://ngrok.com/download下载最新的Linux ngrok客户端。 来自Ubuntu存储库的ngrok-client软件包太旧,不符合要求。
    解压缩下载的ngrok-stable-linux-amd64.zip存档。 它包含一个ngrok二进制文件,您应将其放在$PATH上的某个位置,例如放入/usr/local/bin/
    注册ngrok可能不是必需的。

  4. 使用pip3从GitHub安装onedrived Python3应用程序:

     sudo -H pip3 install git+https://github.com/derrix060/onedriveClient.git 
  5. (可选)为onedrived配置日志文件位置,如果有任何不正常的情况,您可以检查问题,例如:

     onedrived-pref config set logfile_path ~/.config/onedrived/onedrived.log 

帐户设置和驱动器配置

安装成功后,您必须配置您的帐户和驱动器:

  1. 通过运行以下命令,使用交互模式添加OneDrive for Business帐户:

     onedrived-pref account add -b 

    交互式向导将要求您两次在浏览器中打开链接,您必须使用Microsoft Business帐户授权该应用程序。
    在确认授权回到交互式向导后,它会要求您粘贴重定向到的URL。 请按照说明进行操作并按照命令给出的说明进行操作。

  2. 通过检查以下命令的输出来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 
  3. 通过运行以下命令在交互式命令模式下配置驱动器

     onedrived-pref drive set 

    您将看到所有驱动器的列表,并被要求输入要添加到本地配置的驱动器的行号。
    然后,您必须指定要用作根文件夹的本地目录,以便与驱动器同步。 您只需按Enter键即可使用默认的~/OneDrive 。 如果路径不存在,则将创建该路径。 对于要使用的忽略文件的路径也是如此,只需按Enter键 ,它将使用默认的~/.config/onedrived/ignore_v2.txt并在必要时创建它。

  4. 检查以下命令的输出以显示有关所有可用和已配置驱动器的信息。 它应该显示您刚刚设置的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找到进一步的解释。 设置非常简单,只需要大约五分钟。

Interesting Posts