
一直以来,对于同步文件,我一直主要使用 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 创建的符号链接
操作完成后,可以看到下图

在 [OneDrive - Savencia] 文件夹中多了一个 [ JobDoc ] 文件夹,并且可以发现,OneDrive 开始对 [ JobDoc ] 文件夹进行了同步。也就是说 [OneDrive - Savencia] 文件夹认可了这个映射过来的 [ JobDoc ] 文件夹。虽然这个文件夹只是映射过来,本身文件还是在 Dropbox 文件夹中。
而通过查看 [OneDrive - Savencia] 文件夹的属性,可以看到,此文件夹占用空间为 0 字节。

优点: 这样就完成了我最初的需求。并且不会出现同步错误的问题。
缺点: 因为我在家里使用的是Windows,而我工作主力机是MacbookPro。因为我在Windows中已经使用了MKLINK命令在 [OneDrive - Savencia] 文件夹中创建了 Jobdoc 的映射。而造成,我在 OSX 下,无法再使用 ln 命令进行同样的映射,系统会告诉我 Jobdoc 文件夹已经存在了。而这个问题,我暂时还没想到好的解决方法。
因为我家中的 PC 全年不关机。所以暂时我的同步方式是:
- 工作的时候 Mac 对 JobDoc 文件夹中的内容进行了修改。
- Dropbox 对修改的文件进行同步,并同步到家中的 PC。
- PC 中 Dropbox 的 Jobdoc 文件夹的文件会因为映射的原因而激活 OneDrive 开始同步修改后的文件。
- 公司的 MacbookPro 再把 OneDrive 同步到云端的文件同步到 MacbookPro 本地的 OneDrive 中。