如何在Linux上同步OneDrive Business / Office 365?


24

Microsoft OneDrive Business / Office 365 Pro提供1 TB的云存储,但是不幸的是,从来没有一种在Linux上同步它的方法。


2
欢迎来到Ask Ubuntu!我们是一个问答网站,而不是一个论坛。目前,您在指定的问题部分中同时拥有一个问题和一个答案。请编辑您的帖子以删除答案,然后将其发布在下面的答案部分中(页面底部附近应有一个按钮)。谢谢!
赛斯

Answers:


7

目前,实验性的onedrive-d是一个开源程序,由于不接受Microsoft Sharepoint链接,因此只能同步个人OneDrive帐户。这是一种使用GoodSync for Linux同步OneDrive Business / Office 365的方法,该方法免费供个人使用。

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

    ./goodsync-linux-x86_64-release.run
    

    通过回答ñ o表示的GoodSync连接设置和GsServer的Web UI两者。

  2. 在网络浏览器中打开OneDrive。选择右下方的“返回经典OneDrive”。
  3. 现在,浏览器中的网址将如下所示:https://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents/Forms/All.aspx并基于该网址 获得同步链接,该链接office365://xxxxxxx.sharepoint.com/xxxxxxxxxxx/Documents
  4. 在您家中的.goodsync子文件夹中创建一个新文件:

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

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

    gsync sync "OneDrive_Sync"
    
  7. 在这一步,您的Web浏览器将打开OneDrive / Office 365页面,并要求您授权以允许goodsync访问您的帐户。输入凭据后,同步将开始。

限制:Microsoft不允许长度超过270个字符的URL请求,因此GoodSync无法同步具有长路径名的文件。

请享用!


3
我的Web浏览器在步骤7中没有打开授权页面。您知道如何手动执行此操作吗?

3
我的网络浏览器无法打开也登陆
哈哈于TTpro

2
office365:/.../ Documents中的文件系统已被新的OneDrive V2 API取代。单击浏览按钮以重新浏览到您的OneDrive同步文件夹,因为新的OneDrive需要基于浏览器的身份验证(OAuth2)
Ferroao

6

Ubuntu 18.04及更高版本

Ubuntu 18.04及更高版本中的默认Ubuntu存储库中有一个OneDrive客户端。OneDrive是Microsoft的云存储系统。该软件包提供专门用于与OneDrive云存储同步的命令行客户端。

通过以下方式安装:

sudo apt install onedrive

第一次运行时,它要求您使用链接进行身份验证。身份验证后,您可以使用systemctl --user enable onedrive然后启用守护进程systemctl --user start onedrive。可以在手册中找到更多说明man onedrive。设置非常简单,仅需五分钟。


4
这对OneDrive for Business
不起作用

1
@tricasse它适用于Office 365 Pro
Mattia_98 '18 -10-19

2

尽管onedrivedxybu 原始且常用的工具仍然不支持OneDrive for Business,但仅​​支持个人OneDrive。但是,derrix060在GitHub上有一个此项目的分支,该分支对于Business客户端具有某种可行的(但仍然有漏洞)实现。

警告:使用此方法时,强烈建议始终通过https://www.office.com在线检查文件来验证文件是否正确同步,和/或使用此页末尾显示的包装器脚本。至少可以使用桌面通知了解任何错误!

有时,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. ngrok从官方网站https://ngrok.com/download下载Linux的最新客户端ngrok-clientUbuntu存储库中的软件包太旧,无法满足要求。
    解压缩下载的ngrok-stable-linux-amd64.zip档案。它包含一个ngrok二进制文件,您应该将其放在某个位置$PATH,例如/usr/local/bin/
    可能不需要注册ngrok。

  4. onedrived使用pip3以下命令从GitHub 安装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. 通过检查以下命令的输出,验证是否成功添加了帐户。它看起来应该相似,并列出您用来登录的帐户:

    $ 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

    onedrived-pref drive list
    

启动守护程序

现在已经配置了驱动器,您需要尝试启动onedrived守护程序。我建议先以调试模式启动它,以防万一您可能会错过任何问题。这将从onedrived前台开始:

onedrived start --debug

如果一切正常,并且该命令没有崩溃并退出,请尝试将一些文件放在本地OneDrive文件夹中,看看它是否同步。您可能应该能够通过访问https://www.office.com上的OneDrive Web应用程序并检查您本地添加的文件是否显示在其中来进行验证。

您可以onedrived通过按Ctrl+ 再次在终端中退出该过程C

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

我仍然收到消息“无法授权onedrived:interaction_required”。输入第二个用于验证ODfB帐户的链接之后。任何想法为什么会发生这种情况?
Jimakos

@Jimakos抱歉,我从未遇到过该消息。不幸的是不知道。
字节指挥官

1

rclone支持OneDrive for Business。请参阅文章如何使用Rclone在Linux中安装OneDrive(支持企业和个人帐户)-Linux起义博客以了解用法。

这是我的示例,它onedrive1使用rclone 1.48.0(在Fedora 30上)设置一个新的遥控器:

$ rclone config
2019/10/10 06:35:56 NOTICE: Config file ".config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> onedrive1
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
⋮
19 / Microsoft OneDrive
   \ "onedrive"
⋮
Storage> 19      
** See help for onedrive backend at: https://rclone.org/onedrive/ **

Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id> 
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret> 
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n

Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
Choose a number from below, or type in an existing value
 1 / OneDrive Personal or Business
   \ "onedrive"
 2 / Root Sharepoint site
   \ "sharepoint"
 3 / Type in driveID
   \ "driveid"
 4 / Type in SiteID
   \ "siteid"
 5 / Search a Sharepoint site
   \ "search"
Your choice> 1
Found 2 drives, please select the one you want to use:
0: OneDrive - Example Inc (business) id=b!gFLg-RRe****-T9B****
1: OneDrive - Example Inc (business) id=b!gFLg-RRe****-T-H****
Chose drive to use:> 1
Found drive 'root' of type 'business', URL: https://example-my.sharepoint.com/personal/myname_example_com/Documents
Is that okay?
y) Yes
n) No
y/n> y
Current remotes:

Name                 Type
====                 ====
onedrive1            onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

/ElementinnerHTML在我的情况下,驱动器0的URL以结尾并且不包含文件。

从v1.49开始,通过命令行,rclone-browserWeb GUI将其安装在本地目录中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.