通过软连接的方法让不支持多目录同步的网盘实现多目录同步

是不是也有很多朋友和我一样,在计算机的不同目录(甚至是不同分区的不同目录)里保存了不同类别的资料或者文件,想通过具备同步功能的网盘同步到云端,并且在其他场所的计算机上进行同步(更新、编辑、修改等)操作。而我们所知的绝大多数同步软件如:酷盘、百度网盘、盛大网盘、360网盘、快盘、还有之前的够快网盘等等均不支持多目录同步功能,而我们总不能为了实现同步,将文件夹从我们原来熟悉的文件夹位置通通移动到网盘同步文件夹里来吧?况且好多文件是跨分区储存的,如果何必跟完全有可能超过某一分区的可利用空间大小!有没有什么简单的方法来实现该功能呢?下面就以酷盘为例说明以软连接的方式实现该功能:

 

一、XP 系统
1,首先下载 junction.exe 这个文件。
下载地址:http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx
下载后,解压放在C盘根目录下(当然放在其他地方也可以,运行的时候指向对应的路径就行)。
2,开始 > 运行 > cmd,输入命令行:
C:\>junction E:\我的酷盘\连接名称 X:\目标路径
这样就在酷盘内建立了一个链接,当目标目录内的文件发生改变,酷盘也会把它同步到云端,但实际上目标路径并不在酷盘内。
例1:把 收藏夹 的目录链接到酷盘内。(这里用的是绝对路径)
C:\junction E:\我的酷盘\收藏夹 "C:\Documents and Settings\apple\Favorites"
例2:把 我的文档 链接到酷盘内。(这里用的是环境变量路径)
C:\junction E:\我的酷盘\我的文档 "%USERPROFILE%\My Documents"
PS. 1)路径中含有空格,要用引号引起来。
PS. 2)只有NTFS文件系统才可以。
删除连接:junction -d E:\我的酷盘\收藏夹
或者直接删除酷盘内的连接名称。
clip_image001[1]

二、Win7 系统
Win7系统自带了一个 mklink 的命令,不需要额外的文件帮助就可以完成了。
1,开始 > 搜索程序和文件框内输入cmd > 在找到的 cmd.exe 程序文件上右键,以管理员身份运行。然后输入命令行:
mklink /J F:\我的酷盘\连接名称 X:\目标路径
例:把Firefox的属性目录联接到酷盘。
mklink /J "F:\我的酷盘\Mozilla Firefox" %AppData%\Mozilla
clip_image002

 

推荐使用 /J 参数,这样联接带有一个类似快捷方式的箭头,明白这是一个软联接。如果使用 /D 参数,没有箭头,和真实目录显示一样,时间长了可能会忘记了自己都分不出哪个是联接了。mklink参数详细用法请看2楼。
clip_image003

删除连接:直接删除酷盘内的连接名称。

PS. 1)路径中含有空格,用引号引起来。
PS. 2)只有NTFS文件系统才可以。
PS. 3)链接只能针对同一个磁盘上的文件或目录。(这个限制真的不怎么好,实际上需要的就是跨分区链接,只有这样才能最大限度地发挥软连接的作用!
PS. 3)创建链接前,如果已经存在相同的链接名称(或相同名字的目录),则不能创建。
PS. 4)对于大多数同步客户端来说,当软连接的文件发生改变时,需要重新启动网盘同步客户端软件才能识别并在云端作相应更改(这又是一个不方便之处哦,呵呵

mklink.exe用法及参数详解
mklink 用于创建 NTFS 文件系统中文件或目录的链接,其效果和 unix 系统下的 ln 命令类似,
可以从底层(文件系统)实现文件或目录的快捷方式或别名,以这种方式创建的文件或目录链接对于应用程序是透明的;
通过指定参数可以创建出不同形式的文件或目录链接,具体分为硬链接、软链接和符号链接三种,
下面是这个命令的参数及说明(参数格式请直接在 cmd 下运行 mklink 查看)。
?默认情况:文件的符号链接
如没有参数指定,则创建文件的符号链接,删除文件链接不会影响目标文件,且创建链接时允许目标文件不存在[1];
?目录的符号链接(SYMLINKD) /D
该参数可以创建目录的符号链接,删除目录链接不会影响目标目录,且创建链接时允许目标目录不存在;
?目录的软链接(JUNCTION) /J
该参数可以创建目录的软链接(联接),作用基本和符号链接类似[2],NT6系统的用户目录就是以这种形式存在的;
?文件的硬链接 /H
该参数可以创建文件的硬链接,即一个文件的多个别名[3],NT6系统WinSXS目录下的大部分文件是以这个形式存在的;
[1] 创建符号链接和软链接时允许目标文件或目录不存在,此时若访问链接文件会得到一个“位置不可用”的提示,
若之后重新将目标文件或目录补上(路径、名称一致即可),则该链接仍然有效;
[2] 目录符号链接和软链接的区别在于,软链接在创建时会自动引用目标目录的绝对路径,而符号链接允许相对路径的引用,
如分别用 mklink /D dira tdir 和 mklink /J dirb tdir 创建 dira、dirb 对 tdir 的符号链接和软链接,
之后将 dira、dirb 移动到其它目录下,则访问 dira 时会提示“位置不可用”,访问 dirb 时仍然正常指向 tdir;
而分别用 mklink /D dira c:\demo\tdir 和 mklink /J dirb c:\demo\tdir 创建 c:\demo\tdir 的符号链接和软链接,
再将这两个目录链接移动到其它目录下,则 dira 和 dirb 均可正常指向 c:\demo\tdir;
由此可见当创建目录链接时对目标目录使用绝对路径,D 和 J 两个参数实现的目录链接效果是一样的;
[3] 只能创建文件的硬链接,使用 /H 参数创建目录的硬链接时会提示拒绝访问;
硬链接是同一个文件的不同别名,例如对 a.txt 创建了 b.txt 和 c.txt 两个硬链接,
此时 a.txt、b.txt 和 c.txt 均是同一个文件的别名,若删除其中任意一个或两个,
则剩下的那个文件(无论是事先存在还是之后创建)不受影响,仍然指向原先那个文件。
最后再说几点:
创建文件或目录链接仅限于 NTFS 文件系统,且链接只能针对同一个磁盘上的文件或目录;
硬链接只能创建对本分区文件的引用,即不可创建跨分区的文件硬链接;
通过硬链接创建的别名文件在统计大小时会按原文件的大小计算,而软链接和符号链接大小均为零;
硬链接在创建时会事先检测目标文件是否存在,即不允许空链接的存在。

总结,WIN7版的mklink.exe由于不支持跨分区链接、文件变化需重新启动同步网盘客户端才能识别的问题确实不那么令人满意,一方面祈祷微软能否做出进一步的改进,一方面是否也可以用之前WinXP的方式实现(我看了一下官方的说明,junction.exe 这个文件支持WinXP、WinSerVer003及以上版本!)有待读者自行去摸索!