如何使用mklink建立文件链接
Windows 中的mklink
命令用于创造目录或文件的符号链接(软链接)或硬链接。
概念
文件
文件是数据对象和文件路径的链接。
符号链接
符号链接(symbolic link),也叫软链接,创建指向单个文件或文件夹的符号链接,该链接看起来与 Windows 的文件或文件夹相同,即使它只是指向文件或文件夹的链接。打开文件夹的软链接时,您将被重定向到存储文件的文件夹。
符号链接的特点
- 以符号链接创建的文件大小为 0。
- 符号链接的名称或者后缀丝毫不会影响到其目标。
- 创建时只需要一个路径。它的目标可以是本地的、远程的任何文件或目录,即使目标不存在。
- 所做的一切更改都会反映在目标上。因为打开符号链接,就是打开了目标。复制符号链接,会复制目标的内容;移动符号链接,则会移动链接本身。
- 更改目标的名称,移动目标的位置,符号链接将会成为死链, 因为它无法通过设定的路径找到目标;更改符号链接本身的名称和位置,目标不受影响。
- 当目标被删除时,符号链接继续存在,但会成为死链,无法打开。当符号链接被删除时,它指向的目标不受影响。
- 通过相对路径创建的软链接在移动后无法使用,绝对路径创建的移动后不影响使用。
硬链接
硬链接(hard link) 指向目标数据对象的链接。符号链接是指向目标路径的链接,而硬链接则是因为一个卷中的数据对象都有一个独一无二文件 ID,也可以说硬链接是指向目标文件 ID 的链接。
因为他们数据是相通的,这两个文本所有属性都相同,更改其中一个文件的内容,另一个也会随之变化。
硬链接的特点
- 由于不同的文件指向的是同样的数据,所以无论给同一个文件创建多少个硬链接,他们占整个卷的数据大小都是一样的。
- 创建时,它必须指向本地的同一个卷内存在的文件。因为只有在同一个卷内,文件 ID 才是独一无二的,
- 更改目标文件的名称、位置,硬链接不会受到影响。更改硬链接的名称、位置,目标文件不受影响,链接不会断开。因为改名,移动都不会改变文件 ID。
- 当目标被删除时,硬链接继续存在,且可以正常打开、编辑。因为他具备一个完整的文件结构。当硬链接被删除时,目标文件继续存在,不受影响。只有当一个文件 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
的符号链接目录。
>mklink /D target source
H:\<<===>> source 创建的符号链接 为 target
Windows系统中的mklink
支持中文目录:
/D 中文目录 source
mklink <<===>> source 创建的符号链接 为 中文目录
/D target\中文目录 source
mklink <<===>> source 创建的符号链接 为 target\中文目录
此技巧可用于各种事情,包括使用 Dropbox,Google Drive 和 OneDrive 等程序同步任何文件夹。
还可以将笔记内容分散到不同项目中。各个项目中看似有不同的位置,但内容都可集中保存在一处,方便维护和创作。
类似命令
在 Linux 和 MacOS 系统中,类似的命令为 link
和 ln
,Windows 系统可以利用 git bash 中的 link
代替。但是 Git Bash 中的 link
和 ln
命令不支持中文路径,故 Windows 用户还是以 mklink
命令为主。
使用 “NTFSLinksView” 这个软件可以查看系统中的符号链接和目录联接,Symbolic Link
就是符号链接,Junction
是目录联接。