如何使用mklink建立文件链接

Windows
效率工具
作者

yangjh

发布日期

April 8, 2022

Windows 中的mklink命令用于创造目录或文件的符号链接(软链接)或硬链接。

概念

文件

文件是数据对象和文件路径的链接。

符号链接

符号链接(symbolic link),也叫软链接,创建指向单个文件或文件夹的符号链接,该链接看起来与 Windows 的文件或文件夹相同,即使它只是指向文件或文件夹的链接。打开文件夹的软链接时,您将被重定向到存储文件的文件夹。

符号链接的特点

  1. 以符号链接创建的文件大小为 0。
  2. 符号链接的名称或者后缀丝毫不会影响到其目标。
  3. 创建时只需要一个路径。它的目标可以是本地的、远程的任何文件或目录,即使目标不存在。
  4. 所做的一切更改都会反映在目标上。因为打开符号链接,就是打开了目标。复制符号链接,会复制目标的内容;移动符号链接,则会移动链接本身。
  5. 更改目标的名称,移动目标的位置,符号链接将会成为死链, 因为它无法通过设定的路径找到目标;更改符号链接本身的名称和位置,目标不受影响。
  6. 当目标被删除时,符号链接继续存在,但会成为死链,无法打开。当符号链接被删除时,它指向的目标不受影响。
  7. 通过相对路径创建的软链接在移动后无法使用,绝对路径创建的移动后不影响使用。

硬链接

硬链接(hard link) 指向目标数据对象的链接。符号链接是指向目标路径的链接,而硬链接则是因为一个卷中的数据对象都有一个独一无二文件 ID,也可以说硬链接是指向目标文件 ID 的链接。

因为他们数据是相通的,这两个文本所有属性都相同,更改其中一个文件的内容,另一个也会随之变化。

硬链接的特点

  1. 由于不同的文件指向的是同样的数据,所以无论给同一个文件创建多少个硬链接,他们占整个卷的数据大小都是一样的。
  2. 创建时,它必须指向本地的同一个卷内存在的文件。因为只有在同一个卷内,文件 ID 才是独一无二的,
  3. 更改目标文件的名称、位置,硬链接不会受到影响。更改硬链接的名称、位置,目标文件不受影响,链接不会断开。因为改名,移动都不会改变文件 ID。
  4. 当目标被删除时,硬链接继续存在,且可以正常打开、编辑。因为他具备一个完整的文件结构。当硬链接被删除时,目标文件继续存在,不受影响。只有当一个文件 ID 对应的所有硬链接被删除时,数据才真正被标记为删除。

同一个文件 ID 可以对应很多不同的文件路径。这些不同的文件都可以被称为硬链接。

基本用法

mklink 的基本参数如下:

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

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

建立文件的硬链接

假设原文件(source.md)在某驱动器的source文件夹下,即H:\source\source.md。要为其在target目录下创建名为a.md的硬链接文件:

H:\>mklink /H target\a.md source\source.md 
 target\a.md <<===>> source\source.md 创建了硬链接

建立目录的符号链接

假设原目录为source,先要为其建立名为target的符号链接目录。

H:\>mklink /D target source
为 target <<===>> source 创建的符号链接

Windows系统中的mklink支持中文目录:

mklink /D 中文目录 source
为 中文目录 <<===>> source 创建的符号链接
mklink /D target\中文目录 source
为 target\中文目录 <<===>> source 创建的符号链接

此技巧可用于各种事情,包括使用 Dropbox,Google Drive 和 OneDrive 等程序同步任何文件夹。

还可以将笔记内容分散到不同项目中。各个项目中看似有不同的位置,但内容都可集中保存在一处,方便维护和创作。

类似命令

在 Linux 和 MacOS 系统中,类似的命令为 linkln,Windows 系统可以利用 git bash 中的 link 代替。但是 Git Bash 中的 linkln 命令不支持中文路径,故 Windows 用户还是以 mklink 命令为主。

使用 “NTFSLinksView” 这个软件可以查看系统中的符号链接和目录联接,Symbolic Link就是符号链接,Junction是目录联接。

参考资料

  1. https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/mklink
  2. https://sspai.com/post/66834
  3. https://blog.sunxiaowei.net/lang/links-in-windows.html
回到顶部