如何使用OneDrive Free Client Fork使OneDrive与Linux上的文件夹同步

OneDrive 是Microsoft提供的文件托管和同步服务,类似于Dropbox,Google Drive,MEGA等。没有适用于Linux的正式Microsoft OneDrive客户端,但仍可以使OneDrive文件保持同步(与实时文件同步)。监视)和Linux计算机上的文件夹,本文将通过使用 OneDrive Free客户端的分支 仍然保持(用于Linux的命令行OneDrive客户端)。

前一段时间我写过关于使用Rclone在Linux上安装OneDrive的信息(同时支持企业帐户和个人帐户)。某些用户可能更喜欢使OneDrive文件与Linux计算机上的文件夹同步(同步后将文件保存在磁盘上)执行,即使计算机处于脱机状态也允许访问),仅上传/下载更改,而不是挂载OneDrive,在本文中,我们将使用 OneDrive Free Client的分支
原始的OneDrive Free Client 在2018年秋天被废弃了,但工具是 分叉 几个月后,以相同的名称命名,此后一直在不断发展。
OneDrive Free Client分支是用于在Linux上交互和同步OneDrive的完整工具,具有:

  • 状态缓存
  • 使用Inotify进行实时文件监视
  • 文件上传/下载验证,确保数据完整性
  • 断点续传
  • 支持OneDrive for Business(Office 365的一部分)
  • 共享文件夹(OneDrive个人版)
  • SharePoint / Office 365共享库
  • 通过libnotify进行桌面通知
  • 空运行功能可测试配置更改
  • 防止配置更改后重大OneDrive意外数据删除

与原始项目一样,OneDrive Free Client分支没有图形用户界面,因此必须从命令行使用,尽管它确实具有桌面通知,可让您了解同步状态和发生的任何同步错误。
还需要注意的是,当本地更改立即上传到链接的Microsoft OneDrive帐户时,远程更改会延迟到使用时进行下一次同步 --monitor (此“监视”模式使OneDrive Free Client可以持续监视本地文件系统中的更改,并在检测到更改时将其上传)。例如,将该工具作为服务运行时,OneDrive Free Client监视间隔为45秒,因此可能将远程更改同步到本地驱动器最多需要45秒。
对于共享文件夹,对于OneDrive个人帐户,只需将其添加到OneDrive中即可,方法是访问OneDrive网站并登录到您的帐户,然后转到共享文件列表,右键单击您要删除的文件夹要同步,然后单击 Add to my OneDrive。对于OneDrive Business或Office 365帐户,当前不支持共享文件夹。适用于Linux的OneDrive Free Client(fork)文档提到该工具可在Fedora存储库中找到,网址为: 适用于Arch Linux / Manjaro的AUR,在 用于Slackware的slackbuilds.org,以及在NixOS的不稳定通道中。即使在文档中未提及该工具,也可以在Debian和Ubuntu官方存储库中使用该工具(编辑:该文档已更新为反映此问题)。对于Ubuntu,fork仅是在Ubuntu 19.04、19.10和20.04中可用,而Ubuntu 18.04仍然具有旧的,未维护的OneDrive Free Client(我不确定它是否仍然可以运行,但是即使它仍然运行,它也存在许多永远无法修复的错误)。对于Debian,此OneDrive软件包可在Sid和Bullseye中获得。
因此,要从Fedora,Debian / Ubuntu上的官方存储库安装OneDrive Free Client(叉子),请使用:

  • 在Fedora上安装OneDrive Free Client(叉子):
sudo dnf install onedrive
  • 在Solus OS上安装OneDrive Free Client(叉子):
sudo eopkg install onedrive
  • 在Debian Sid或Bullseye / Ubuntu 20.04、19.10或19.04以及基于这些Ubuntu版本(例如Pop!_OS 19.10或19.04)的Linux发行版上安装OneDrive Free Client(叉子)/ Raspbian Testing / Kali Linux:
sudo apt install onedrive

开发人员建议甚至在Ubuntu 19.10上从源代码安装最新版本,因为存储库中的版本已经很旧。对于Debian Buster和Ubuntu 18.04(以及Pop!_OS 18.04,Linux Mint 19. *,基本OS 5或5.1,等),您将需要从源代码构建OneDrive Free Client(叉子) 如其维基上所述,因为存储库中的版本是旧的,未使用的应用。
对于其他Linux发行版,请查看存储库中是否有“ onedrive”软件包并进行安装,或者 从源构建
OneDrive Free客户端(叉子) Docker镜像 也可以。

如何使用OneDrive Free Client(fork)将Microsoft OneDrive与Linux计算机上的文件夹同步

1.使用您的Microsoft OneDrive帐户为Linux授权OneDrive Free Client(叉子)。
对于Office365 /访问Office 365商业或教育版本中的Sharepoint组驱动器,请参阅以下说明: 这个页面
对于个人帐户,请打开终端并运行:

onedrive

首次运行时,运行“ onedrive”的终端会显示有关通过访问链接授权此应用程序的消息,复制终端中显示的链接并将其粘贴到Web浏览器中。登录到Microsoft之后帐户,您应该会看到一个页面,询问您是否要让此应用程序访问您的信息,请单击 Yes
单击后 Yes,您将进入一个空白页。没关系,应该是这样,您现在需要复制该空白页的URL,然后将其粘贴到您使用OneDrive帐户授权onedrive工具的终端中。
之后,您会在终端中看到一条消息,说 No OneDrive sync will be performed without either of these two arguments being present这是因为我们没有尝试同步任何文件,我们只是使用您的OneDrive帐户授权了onedrive应用程序,因此可以忽略它; 2.OneDrive与本地文件系统之间的首次同步。
授权后,您可以将云OneDrive文件同步到本地磁盘。onedrive命令行工具将所有OneDrive文件下载到 ~/OneDrive (将OneDrive文件夹放置在主目录中)。您无需创建此文件夹,因为onedrive工具将为您创建该文件夹。
让我们执行一次试运行(试用同步),该试运行不进行任何实际更改,以确保使用以下方法确保此OneDrive Free Client for Linux正常运行:

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

如果一切正常,让我们开始将您的OneDrive文件同步到本地 ~/OneDrive 您可以选择将所有OneDrive文件和文件夹与本地OneDrive文件夹同步(下面的步骤2A),或者仅同步一些文件和文件夹(下面的选择性同步步骤2B).2A。将所有OneDrive云文件同步到您的本地磁盘(到〜/ OneDrive),请使用:

onedrive --synchronize

这仅用于初始同步。要使OneDrive Free Client for Linux在后台运行并在检测到更改时同步文件,请参阅下面的步骤3(启用systemd服务).2B。启用和使用选择性同步。
如果要同步多个目录和文件而不是全部,该怎么办?然后,您将要使用此OneDrive Linux命令行客户端提供的选择性同步功能。
选择性同步是一项功能,它允许指定文件和目录以在OneDrive和本地文件系统之间进行同步,而跳过所有其他目录和文件。
非常重要的一点是,OneDrive Free Client for Linux不会从磁盘上删除任何已同步的目录或文件,以防您稍后通过选择性同步将其排除在外。它会在以后的同步中将它们排除在外。
示例:如果仅允许OneDrive同步Folder1和Folder2,然后在以后将Folder3添加到计算机上的OneDrive目录中,则该Folder3将不会与您的OneDrive帐户同步;但是如果您将Folder1,Folder2和Folder3与您的同步OneDrive帐户,然后决定仅允许Folder1和Folder2同步,不会将Folder3从Linux计算机上的OneDrive目录中删除,但是您在此文件夹中所做的任何更改都不会与OneDrive帐户同步。
您可以通过创建一个名为的文件来为OneDrive Free Client启用选择性同步 sync_list~/.config/onedrive编辑此 sync_list 文件,并将相对路径添加到要与OneDrive同步的文件和目录中的每一个新行中。与此文件中任何与行不匹配的所有文件和目录都将被跳过同步。
例如,假设我的OneDrive帐户中有许多文件和文件夹,但是我只想同步2个目录(称为备份和照片)和3个文件(分别为file1.ods,file2.odt和file3.odt),所有这3个文件都位于在我的OneDrive帐户中的“文档”文件夹中。 ~/.config/onedrive/sync_list 文件将需要包含以下几行:

Backup
Photos
Documents/file1.odt
Documents/file2.odt
Documents/file3.odt

首次使用选择性同步,以及每次对 ~/.config/onedrive/sync_list 文件,您必须使用以下命令执行完全重新同步 --resync,就像这样:

onedrive --synchronize --resync

如果您启用了OneDrive Free Client systemd服务(下面的步骤3),并且该服务当前正在运行,则尝试运行此命令时会出现错误消息,说 Initializing the Synchronization Engine ... A database statement execution error occurred: disk I/O error. Segmentation fault (core dumped)在这种情况下,您将需要停止onedrive systemd服务,然后运行resync命令,然后再次启动该服务,如下所示:

systemctl --user stop onedrive

onedrive --synchronize --resync

systemctl --user start onedrive

还有用于跳过目录,跳过文件,点文件和符号链接的选项,这些选项可通过OneDrive Free Client for Linux配置文件使用(请参阅下面的步骤5)。
就像完整的定期同步一样,这仅适用于初始同步。要让OneDrive Free Client for Linux在后台运行并在检测到更改时同步文件,请参阅下面的步骤3.3启用OneDrive Free Clientd服务。
要使OneDrive Free Client for Linux作为服务运行,因此它将自动从您的计算机启动,并不断监视OneDrive的任何更改,同步更改的文件和文件夹,让我们启用其systemd服务。
当用作systemd服务时,此适用于Linux的OneDrive命令行客户端在监视器模式下运行(--monitor),它可以持续监视本地文件系统中的文件更改,尽管文件很多,但可能会遇到由本地环境引起的问题(无法添加新的inotify监视),解决方案是创建最大用户观看次数。 本页面 显示了如何在Debian / RedHat或类似版本(Ubuntu,Fedora等)和Arch Linux / Manjaro上执行此操作。
要为当前(非root)用户启用并启动OneDrive systemd服务(启用通知),请运行:

systemctl --user enable onedrive

systemctl --user start onedrive

使用以下方法检查OneDrive Free Client系统服务状态:

systemctl status --user onedrive

只检查日志:

journalctl --user-unit onedrive -f

与systemd相关:chkservice是具有终端用户界面的Systemd Unit Manager(可用的新版本)
有关运行OneDrive服务的其他方式(以root用户身份,通过init.d),请参阅 它的文件请务必注意不要删除 ~/OneDrive (或OneDrive文件夹使用的任何路径)文件夹,同时运行OneDrive Free Client fork systemd服务,因为它将从OneDrive中删除所有文件(您仍然可以在Recycle中访问OneDrive网站上的文件) Bin .. 5 ..(可选)配置选项。
如果要为OneDrive文件夹使用自定义位置,要更改更改的文件监视间隔,以及更多其他操作,可以使用OneDrive Free Client配置文件。
在Debian,Ubuntu和衍生产品上,您可以在以下位置找到示例配置 /usr/share/doc/onedrive/config其他Linux发行版,或者如果找不到该配置文件,则可以从OneDrive Free Client GitHub项目页面获取它- 这是直接链接
要为您的用户更改默认的OneDrive Free Client for Linux配置,请将该配置文件复制到 ~/.config/onedrive例如在Debian / Ubuntu和其他Linux发行版中,该文件安装在 /usr/share/doc/onedrive/config,将其复制到 ~/.config/onedrive 使用:

cp /usr/share/doc/onedrive/config ~/.config/onedrive/

现在要更改某些OneDrive Free Client选项,请打开 ~/.config/onedrive/config 使用文本编辑器打开文件。其中的所有选项均被注释掉(它们具有 # 在它们前面);要更改默认值之一,请取消注释该行,然后将该值设置为要使用的值。
在大多数情况下,配置文件中的选项应该是不言自明的。有关帮助,请参见onedrive手册页(man onedrive)。
有关在Linux上使用OneDrive Free Client的更多信息,包括如何与多个OneDrive帐户一起使用,为OneDrive systemd服务启用代理支持等等,请查看OneDrive Free Client。 使用说明文件

Sidebar