利用mklink指令清理c盘
今天发现c盘满了,想清理一下,但是面对c盘中的文件又不敢轻举妄动。在不清楚文件作用的情况下,直接删除文件还是有风险的。那么有没有什么方法可以保留文件但是同时又把c盘中的空间清理出来呢?带着这个问题,我打开搜索引擎,果然发现了符合我需求的办法。
mklink
没错,解决方案就是windows系统自带的指令——mklink,当我们在cmd输入mklink /?
时,控制台会返回以下内容
1 | MKLINK [[/D] | [/H] | [/J]] Link Target |
windows链接类型
为了看懂控制台给出的用法,我查询了windows的各个链接类型以及他们的区别
快捷方式(Shortcut):这个是最常见的链接类型了,我就不过多介绍
符号链接(Symbolic Link):符号链接的路径可以是相对路径或绝对路径,可以是目录或文件,不占空间,可以跨本地磁盘,也可以跨网络磁盘(共享目录)。源目录移动、重命名或删除后,链接目录无效;链接目录删除,源目录不受影响;源目录里面的文件发生变化时(新增、修改、删除),链接目录里面的文件同步发生变化,反之,同样成立。
联接(Junction):联接的路径只能是绝对路径,只能是目录,不占空间,只能跨本地磁盘。其他与符号链接差别不大。
硬链接(Hard Link):硬链接的路径只能是绝对路径,占用空间和源文件一样且只能是文件。源文件删除后,链接文件无效;链接文件删除,源文件不受影响;只有将源文件和链接文件全部删除时,才会将文件真正的删除;当源文件内容发生变化时(修改),链接文件同步发生修改,反之,同样成立。
文件符号链接操作
作为测试,我首先在E盘和F盘各创建一个test文件夹。并创建了E:\test\text1.txt
和F:\test\text2.txt
两个文件。然后运行指令
1 | mklink E:\test\text1.txt F:\test\text2.txt |
但是控制台给我一个报错
1 | 当文件已存在时,无法创建该文件。 |
于是我删除了E:\test\text1.txt
,然后再次运行指令,控制台返回了
1 | 为 E:\test\text1.txt <<===>> F:\test\text2.txt 创建的符号链接 |
此时E:\test
下多出了一个叫test1.txt
的文件,并且有一个类似超链接的标志,我在任意一个txt文件中修改内容,另一个则会同步改变。
目录符号链接操作
与文件符号链接一样,我们现在F:\test
下创建了一个target
的文件夹,然后运行
1 | mklink /d E:\test\link F:\test\target |
现在E:\test
又出现一个link
文件夹,这个文件夹与target也是同步变化的,最重要的是,这个link文件夹是不占空间的,也就是说,我们可以利用这种方法将c盘的一些文件夹作为link符号链接到target上,以达到清理c盘空间的目的。
目录联接操作
1 | mklink /j E:\test\link F:\test\target |
在这个例子中与目录符号链接的效果差别不大
硬链接操作
我们将E:\test\
清空并创建F:\test\text2.txt
,执行
1 | mklink /h E:\test\text1.txt F:\test\text2.txt |
系统报错
1 | 系统无法将文件移到不同的磁盘驱动器。 |
差点忘了硬链接不能跨本地磁盘
重新执行命令
1 | mklink /h F:\test\text3.txt F:\test\text2.txt |
运行成功
1 | 为 F:\test\text3.txt <<===>> F:\test\text2.txt 创建了硬链接 |
小结
今天通过清理c盘的契机了解到mklink指令,并深入了解(虽然也不是很深入)了windows系统上不同的链接类型。如果大家有什么想补充或者纠错的,请在评论区留言~