0%

Dropbox & Onedrive 合作同步

1

一直以来,对于同步文件,我一直主要使用 Dropbox.

虽然我也有 OneDrive 和 GoogleDrive 的教育版账号,但是对于工作的文件我还是只用 DropBox。主要是因为 Dropbox 的历史版本比较好用,而工作的文件大多都是各种格式的文档。

而 GoogleDrive,主要用来存一些音频视频以及小说之类的,毕竟空间比较大。

但是比较巧,这个月公司集团忽然不知道为什么,说是要全球上云。感觉可能是考虑中国区只能用微软的全套,所以就上了 Office365,这样我就忽然多了一个 OneDrive for Business 账号。

其实,从我自己来说,OneDrive 用不用都可以,不过在工作中,因为经常要给同事分享文件,想了想,OneDrive 在分享文件,以及协同编辑上确实比较有用。所以就考虑把 Dropbox 中的工作文件夹用 OneDrive 同步。而 Dropbox 中的其他文件夹,我还是沿用 Dropbox,毕竟大家都知道,Onedrive for Business 的管理员是可以随意查看员工的同步文件的。

不过,我的工作文件夹,我还是希望能同时用 Dropbox 同步,也就是工作文件夹,我希望能 Dropbox 和 Onedrive 同时同步。

仔细想想,这个问题,我觉得有两种方式可以解决,但是两种方式各有利弊。甚至我下面写的第一种方法,我怀疑有问题。
下面就分别说明一下两种方式以及利弊。

OneDrive 目录放在 Dropbox 目录中

这个方法,其实就是在设置 OneDrive 的目录的时候,把 Dropbox 根目录作为 OneDrive 的根目录。
也就是下图。

图中可以看到有一个 [JobDoc] 文件夹,就是我的工作文件夹。
这个方法,就是把 [JobDoc] 文件夹放入 [ OneDrive - Savencia ] 文件夹中。

这样就可以 Dropbox 同步所有文件的同时,OneDrive 还可以对 [OneDrive - Savencia] 文件夹中的 [ JobDoc ] 文件夹进行同步。

优点: 就是上面所说,比较简单的就实现了最初我的目的,Dropbox 同步所有文件的同时,OneDrive 对其中某个文件夹进行同步。

但是实际操作中,我会发现会有一个严重的问题,或者说我自己难以接受的问题。
缺点: [OneDrive - Savencia] 文件夹内会有一个以 . 开头命名的文件(例如 .85sa5465dfef-354fe8fasdf8e1), 而 Dropbox 会始终提示这个文件无法被同步。同时,时不时的 Dropbox 还会提示 [OneDrive - Savencia] 文件夹内文件大量无法被同步。但是我的观察是最终这些无法被同步的文件,还是会被同步。(可能是被 OneDrive 同步了)

Windows MKLINK 做文件夹映射

我个人感觉 MKLINK 命令其实就是 Linux 中的 ln,都是做符号连接的。
简单的说,就是在目标目录创建一个源文件 / 文件夹的映射。具体我用文字不太容易说清楚。下面我用操作和截图来说明。

MKLINK 命令在 Windows 中名字叫做 Symbolic Link(符号连接)
MKLINK 说明如下表:

不带参数 /D 参数 /H 参数 /J 参数
中文名称 符号链接 符号链接 硬链接 联接
英文名称 Symbolic Link Symbolic Link Hard Link Junction
作用对象 文件 目录 文件 目录
是否一定指向路径
dir 类型 SYMLINK SYMLINK 无特殊显示 JUNCTION
资源管理器类型 .symlink 文件夹 无特殊显示 文件夹
资源管理器图标 快捷方式 文件夹快捷方式 无特殊显示 文件夹快捷方式
修改同步
删除同步
彻底删除源 删除源路径 删除源路径 删除所有硬链接 删除源路径
引用错误报错 引用了一个不可用的位置 - 引用了一个不可用的位置

MKLINK 命令需要使用管理员权限(实测如果不操作 C 盘文件,不需要管理员权限),在 cmd.exe 中运行。在 Windows 10 中,可以在开始菜单中搜索 cmd,而后右键搜索结果,选择「以管理员身份运行」。 或者 CMD + R,然后输入 CMD 回车即可(非 C 盘文件操作)。

对于我来说,我的操作如下:
首先看一下 MKLINK 的命令规则。

C:\Users\AAA>MKLINK
创建符号链接。

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      创建目录符号链接。默认为文件
                符号链接。
        /H      创建硬链接而非符号链接。
        /J      创建目录联接。
        Link    指定新的符号链接名称。
        Target  指定新链接引用的路径
                (相对或绝对)。

因为我要做的是把 Dropbox 目录下的 [JobDoc] 文件夹映射到 [OneDrive - Savencia] 文件夹内,所以命令如下:

C:\Users\AAA>MKLINK "E:\OneDrive - Savencia\JobDoc" E:\Dropbox\JobDoc
// 回车后结果如下
为 E:\OneDrive - Savencia\JobDoc1 <<===>> E:\Dropbox\JobDoc 创建的符号链接

操作完成后,可以看到下图
20181219_212336

[OneDrive - Savencia] 文件夹中多了一个 [ JobDoc ] 文件夹,并且可以发现,OneDrive 开始对 [ JobDoc ] 文件夹进行了同步。也就是说 [OneDrive - Savencia] 文件夹认可了这个映射过来的 [ JobDoc ] 文件夹。虽然这个文件夹只是映射过来,本身文件还是在 Dropbox 文件夹中。

而通过查看 [OneDrive - Savencia] 文件夹的属性,可以看到,此文件夹占用空间为 0 字节。

20181219_212639

优点: 这样就完成了我最初的需求。并且不会出现同步错误的问题。
缺点: 因为我在家里使用的是Windows,而我工作主力机是MacbookPro。因为我在Windows中已经使用了MKLINK命令在 [OneDrive - Savencia] 文件夹中创建了 Jobdoc 的映射。而造成,我在 OSX 下,无法再使用 ln 命令进行同样的映射,系统会告诉我 Jobdoc 文件夹已经存在了。而这个问题,我暂时还没想到好的解决方法。

因为我家中的 PC 全年不关机。所以暂时我的同步方式是:

  1. 工作的时候 Mac 对 JobDoc 文件夹中的内容进行了修改。
  2. Dropbox 对修改的文件进行同步,并同步到家中的 PC。
  3. PC 中 Dropbox 的 Jobdoc 文件夹的文件会因为映射的原因而激活 OneDrive 开始同步修改后的文件。
  4. 公司的 MacbookPro 再把 OneDrive 同步到云端的文件同步到 MacbookPro 本地的 OneDrive 中。