0%

mlink命令搭建Onedrive软连接实例

前言

OneDrive的自动同步功能在多主机工作时特别便捷,但OneDrive只能默认同步保存在该位置的文件到其服务器,有时需要同步本地其他目录的文件只能借助辅助文件夹手动同步。

尝试解决方案:利用DOS命令mklink给待同步的文件目录在OneDrive文件夹下创建映射。

简介

NTFS 符号链接又称“符号链接”,是 NTFS 文件系统中指向文件系统中的另一个对象的一类对象,被指向的对象叫做“目标”。mklink是 Windows 系统下用于创建符号链接的工具,存在于 Windows Vista 及以后版本的 Windows 操作系统中。


语法

1
2
3
4
5
6
7
8
9
10
11
12
C:\WINDOWS\system32>mklink
创建符号链接。

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

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

    /d/j的区别

    1. 创建新链接路径

      /d可以是相对路径,也可以是绝对路径;

      /j必须是绝对路径

    2. 执行后,剪切/移动新链接路径

      /d生成的目录,移动到其他地方,仍旧保持链接。对源目录无影响,/d生成的目录消失

      /j生成的目录,移动到其他地方,会产生一个新的副本文件夹,源文件夹内容全部移至新普通文件夹内,源文件夹清空,源文件夹仍旧存在,/j生成的目录也依旧存在


      示例:

      target文件夹中存有文件a.txt,执行命令行创建链接

      1
      mklink /j D:\link\target D:\target

      剪切D:\link\中的目录文件夹target(带有小箭头)E:\后,D盘源文件夹内容全清空,全部(即a.txt)被移动至E盘的target(此时不带小箭头)文件夹中,同时D:\link\中生成的目录target(带有小箭头)依旧存在,但此时由于目标文件夹D:\target被清空而显示为空。


    3. 软件打开

      用filedialog打开,/d生成的目录,地址栏会跳到源目录位置。

      /j生成的目录,地址栏不会跳到源目录位置。

      用FolderDialog打开,两者相同。


    总结:/d更像一个快捷方式。


  • 文件链接

    参数 /h 版本的 mklink 命令可以为文件创建硬链接。当源路径是目录时,不带参数的 mklink 会报错「拒绝访问」。在 cmd 中使用 dir 列出当前目录的文件列表时,硬链接的样式与正常文件没什么不同。

    删除参数 /H 版本的 mklink 命令创建的硬链接,不会影响源路径指向的文件。删除参数 /H 版本的 mklink 命令创建的硬链接指向的源文件,也不会影响硬链接。只有当一个文件的所有硬链接都被删除时,文件才被真正删除。


  • 不带参数

    不带参数的 mklink 命令可以为文件创建符号链接。当源路径是目录时,不带参数的 mklink 不会报错,但是实际产生的符号链接不可用。在 cmd 中使用 dir 列出当前目录的文件列表时,符号链接显示为 SYMLINK,同时在文件名后以方括号表示链接的源地址。

    删除不带参数的 mklink 创建的符号链接,不会影响源路径指向的文件。删除不带参数的 mklink 创建的符号链接指向的源文件,访问符号链接时无法访问。


限制

  • 使用mklink命令需要管理员权限。

  • 这个功能必须是在NTFS文件系统上才能使用。

  • 参数 LinkTarget 要求不能使用 Windows 中不允许用作文件名的字符(\ / : * ? “ < > |)。并且如果 LinkTarget 这两个参数中需要包含空格,则必须使用英文双引号将内容引起来,以避免参数识别错误。

    1
    mklink /d "C:\Users\<win-username>\OneDrive\ws" "D:\Workspace"
  • 符号链接在系统启动的时候是不工作的,下面这些文件(夹)不可以作为符号链接替换

    1
    2
    3
    \Windows
    \Windows\system32
    \Windows\system32\config

使用方法

建立(以Onedrive为例)

OneDrive默认的保存位置是C:\Users\<win-username>\OneDrive

以管理员模式打开命令提示符,在打开的窗口中输入命令:

1
mklink /d C:\Users\<win-username>\OneDrive\target E:\target

注意:执行操作时请确保C:\Users\<win-username>\OneDrive下没有名为“target”的目录,否则将会报错。

回车键执行后,命令提示符返回“……创建的文件链接”字样的文字,即说明建立连接成功。


删除

  1. 在OneDrive设置中选择同步文件夹时取消勾选自建符号链接的目录。

  2. 直接删除符号链接目录。

  3. cmd命令删除

    1
    2
    #删除虚拟的链接目录,并不会删除远程文件夹真实文件,注意千万不能用del,del会删除远程的真实文件。
    rmdir C:\Users\<win-username>\OneDrive\target

注意事项

  • 链接目录内的文件即使已经上传完毕,其状态也会一直显示正在上传(参考)。
  • 在Web版OneDrive中删除自建的符号链接会导致目标目录内文件丢失。