0x00 前言

一个基于 Sybmolic Link 的很有意思的解决方案:
mklink /D <产生一个不占空间的等价目录位置> <占空间的目录位置>
可用于将安装好的程序目录剪切到其他位置,在原位置生成一个标志链接,以达到腾出硬盘空间的同时不影响使用。
例如,把游戏已经安装到 C 盘了,之后想挪到 D 盘去,但担心剪切过去游戏就玩不了了。
假如直接剪切,会带来复杂的文件依赖问题,这样可以给C盘腾出来了还不用考虑各种文件依赖问题。

简单来说,陪伴我快 7 年了的笔记本,它的磁盘空间不怎么够。
C 盘有个模拟器,连程序带数据一起 17.9G,我给他剪切到 D 盘去。
现在几个盘均衡负载啦,看起来都还不错 ~
但是,无论是点桌面上的模拟器快捷方式、或是在 D 盘找到模拟器的 exe 文件打开,
都会报错 —— “有文件找不到”。

0x01 原理解释

我们会有这样一种经验:
很多程序,我们把整个文件夹剪切到其他地方之后,虽然一个文件都没少,就是没法用了。
这其实是因为,很多通过安装包安装的程序,通常使用绝对路径来定义每个资源应该去哪个位置获取。
例如 C:/abc/Emulator.exe,我们把 abc 文件夹挪到 D 盘,但这个路径却不会跟着我们的剪切而变化。
这样一来,程序执行中需要找资源的时候,路径所对应的位置却什么都找不到。

我们平日里见到的“绿色版”的程序其实就是这些路径由相对路径来定义。
例如 当前目录/bin/emulator.exe,所以文件夹在哪,不影响程序在这个 当前目录 找到对应的资源。

0x02 解决方案

在 Linux 里,有一个特别好用的办法叫做 soft link。
可以理解为呼叫转移,我们把手机号 DEST 呼叫转移给 SRC,这样我们给这两个号码打电话的时候其实都是在给 SRC 打,我需要 DEST/abc.txt 的时候,机器会自动把 SRC/abc.txt 给我。
这个操作在 linux 里可以写为 ln -s <dest_path> <src_path>
例如 ln -s /home/chendian /home/chend,可以解决在不同机器上名字不同,但又不想改 path 的问题。

但在 Windows 里,用 git bash 来这样操作,却是不行的。
我们可以发现,SRC 和 DEST 虽然连接起来了,但他们俩都占用了 17.9G 的空间,
看来 Windows 的事,还是得交给命令行,去查阅了一些资料,这种方案是完美而有效的:
mklink /D <dest_path> <src_path>,例如 mklink /D "C:\Program Files\MuMu" "D:\MuMu"

完整的操作过程如下所示:

  • C 盘的原有一个目录 MuMu 占用空间 17.9G,
  • MuMu 被剪切到 D 盘,C 盘没有 MuMu 文件夹了,桌面上 MuMu.exe 的快捷方式用不了了
  • mklink /D "C:\Program Files\MuMu" "D:\MuMu"
  • C 盘出现一个 MuMu 占用空间 0
  • D 盘的 MuMu 占用空间 17.9G
  • 桌面、开始菜单里的快捷方式都可以无知觉地继续正常工作

0x03 延伸阅读

关于 symlink 的介绍,这篇我觉得写的很好,摘抄一下。
reference: https://blog.51cto.com/u_15449929/4764192

符号链接(Symlink,Softlink)
是对文件或目录的引用,实际上符号链接本身是一个“记录着所引用文件或目录的绝对或相对路径”的特殊文件,通过符号链接的操作都会被重定向到目标文件或目录。对符号链接和快捷方式的“读、写、遍历”等操作都会被重定向到目标文件或目录,但对它们的“复制、删除、移动、配置 ACL”等操作只针对自身。

同时适用于文件、目录。这是一种超级shortcut,文件大小为0字节和不占用空间。

可以使用相对、绝对路径。假设创建symbolic link时使用了相对路径,保存到NTFS中的就是相对路径,不会隐式转换成绝对路径。

可以跨盘符,可以跨主机,可以使用UNC路径、网络驱动器。

在Explorer中删除symboliclink,不影响target。

删除target,symboliclink仍将存在,但失效了,变得不可用。

文件类型是.SYMLINK

它们可以像普通文件一样操作,但所有对符号链接的操作都实际作用于目标对象。符号链接对用户而言是透明的,符号链接看上去和普通的文件和文件夹没有区别,操作方法也一模一样。

对符号链接和快捷方式的“读、写、遍历”等操作都会被重定向到目标文件或目录,但对它们的“复制、删除、移动、配置 ACL”等操作只针对自身,符号链接不但可以应用于本地系统,还可以应用 UNC 路径。

创建符号链接不仅可以当作快捷方式使用,最重要的是重定向链接符可以被程序读取然后重定向真正的位置,这是快捷方式无法做到的。

0xFF 实际效果演示

这个指令是在命令行中使用的,
所以我们需要先使用管理员权限打开 CMD:

本例中:
“D:\MuMu” 是 17.9G 的目录,是源文件夹
“C:\Program Files\MuMu” 是 0B 大小的 SymLink,是生成的链接文件夹

C:\Program Files>mklink /D "C:\Program Files\MuMu" "D:\MuMu"
为 C:\Program Files\MuMu <<===>> D:\MuMu 创建的符号链接C:\Program Files>dir驱动器 C 中的卷是 System卷的序列号是 787D-CF6DC:\Program Files 的目录2022/08/05  13:16    <DIR>          .
2022/08/05  13:16    <DIR>          ..
2022/05/24  15:56    <DIR>          Lenovo
2022/03/06  15:09    <DIR>          Mendeley Reference Manager
2022/08/05  13:16    <SYMLINKD>     MuMu [D:\MuMu]
2022/06/03  23:31    <DIR>          NVIDIA Corporation
2021/04/11  22:41    <DIR>          TENCENT
2016/04/02  09:48    <DIR>          ThinkPad0 个文件              0 字节61 个目录 25,995,014,144 可用字节C:\Program Files>cd MuMuC:\Program Files\MuMu>dir驱动器 C 中的卷是 System卷的序列号是 787D-CF6DC:\Program Files\MuMu 的目录2022/08/05  12:41    <DIR>          .
2022/08/05  12:41    <DIR>          ..
2022/08/05  12:41    <DIR>          emulator0 个文件              0 字节3 个目录 46,871,433,216 可用字节C:\Program Files\MuMu>

资源管理器里看起来依然是一个快捷方式的样子
但在上文中我们知道,这并不是快捷方式的 MuMu.lnk 文件,而是 SYMLINKD 格式的。
2022/08/05 13:16 <SYMLINKD> MuMu [D:\MuMu]

【SymbolicLink】利用软连接将已安装程序搬迁到其他盘符相关推荐

  1. windows安装程序创建_如何在Windows上创建已安装程序的列表

    windows安装程序创建 Reinstalling Windows is a good way to fix serious problems with your computer, or just ...

  2. [windows phone 7 ]查看已安装程序GUID

    首先介绍下wp7RootToolsSDK,这个功能相当强大,适合研究wp7高级功能. 它支持File,Register操作,比之前的COM调用要简单,方便. 功能:查看已安装程序的guid 开发心得: ...

  3. WIN10之右键“管理”报错:该文件没有与之关联的程序来执行该操作,请安装一个程序,或者,如果已安装程序.....

    在网上找不到较好的解决方法,但是又影响操作,通过自己排查出来的解决方式.之前一直通过win+R 输入"sysdm.cpl"调出管理界面. 故障提示: win10系统,此电脑(我的电 ...

  4. [windows phone7 ]手机端程序备份工具--wp7钛备份 查看已安装程序GUID

    本人原创,原发表在 http://www.wpxap.com/thread-370862-1-1.html,欢迎测试. 进度: 5月1日 16:00 已经搞定zip压缩,正在进行稳定性测试. 5月1日 ...

  5. 创建ESXi 6.7安装程序USB闪存盘的前3个免费工具

    创建ESXi 6.7安装程序USB闪存盘的前3个免费工具 Unetbootin Unetbootin工具是免费使用的,您可以在此处从Github下载  . 我们需要原始的VMware ISO文件,并将 ...

  6. 该文件没有与之关联的程序来执行该操作。请安装一个程序,或者,如果已安装程序,请在“默认程序”控制面板中创建关联。

    今天双击远程桌面快捷方式的时候一直出现上述的提示,但是直接打开远程桌面不通过快捷方式打开是能正常打开访问的.这时第一时间想到的是使用重启大法,很不幸失败了.然后启用B计划,开始百度,百度了很多方法,有 ...

  7. Windows10记一次去掉桌面图标箭头引发的血案:该文件没有与之关联的应用来执行操作,请安装一个程序,若已安装程序,请在默认程序控制面板中创建关联。

    前两天我的Windows10系统升级,这次升级试一次大型升级,从1803版本升级到1903版本,本以为升级系统能给我带来不一样的体验,可是没有--升级之后我桌面图标左下方又出现了小箭头,对于我这种强迫 ...

  8. WMI 获得已安装应用程序列表

    问题 13:如何列出特定计算机上已经安装的所有应用? 转载http://www.microsoft.com/china/technet/community/scriptcenter/resources ...

  9. java卸载2503_Win7/Win8.1/Win10安装程序错误2502/2503终极解决大法 - IT之家

    IT之家发现,在使用某些Windows Installer安装程序时,有时候会出现安装和卸载失败的问题,错误代码为2502或2503.不过除了这些代码外,微软并没有提供解决办法.这一问题出现在Win7 ...

最新文章

  1. c++ vector嵌套传参
  2. Redis实战之征服 Redis + Jedis + Spring (三)
  3. C语言库函数大全及应用实例七
  4. 高德地图:地理/逆地理编码
  5. 深度信念网络Deep Belief Networks资料汇总
  6. python3 readexcel pandas问题,使用python中的pandas中的read_excel函数将日期保留为字符串...
  7. 常见的php 字符串函数,php 常用字符串函数总结
  8. 上海服务器虚拟机系统,服务器虚拟机系统重装系统
  9. bzoj1303[CQOI2009]中位数图
  10. c语言中数组结尾的0的作用,C语言里面一个数组最后的\0表示什么意思?
  11. mysql集群 hbase_hbase完整分布式集群搭建
  12. 「算法介绍」如何设计最安全的加密机制
  13. php爬虫框架phpfetcher,TrackRay:打造一款自己的渗透测试框架
  14. 盘点那些改变世界的代码
  15. NginxWebUI - 图形化的 Nginx 配置管理工具
  16. [12-22]XP系统城市更新[www.xp366.com]
  17. MacBook Air重置开机密码
  18. leetcode——回溯
  19. AR+LBS线下社交游戏尝试
  20. ripro9.0修正升级版,无加密无后门,无需扩展,最新资源

热门文章

  1. Win10+Word2016保存丢失解决方案
  2. RTP协议封装H264/H265/AAC
  3. C#利用QQ游戏破解QQ密码
  4. Go 语言入门三部曲(二):能用 Go 语言写管理系统
  5. 计算机网络基础北邮,北邮 大三下 计算机网络技术实践 实验五_图文
  6. 运维-jenkins发版执行远程脚本连不上ssh
  7. Adobe应用服务器企业版
  8. 从互联网+角度看云计算的现状与未来(1)
  9. html 文本框css设置边框圆角
  10. 【Python】霍兰德人格分析雷达图