使用文件硬链接解决重复复制移动的问题

最近在研究蓝噪声功率谱图的绘制, 作者是用Java+Matlab进行混合编程的. 每一次改动Java代码以后都需要将.java文件产生的.class文件复制到Matlab工作目录下, 这其实有点繁琐, 于是想到了利用文件的硬链接来减少这些重复繁琐的操作.

直接利用CMD创建即可. PowerShell和CMD使用的是不同指令集. CMD的指令理论上在Win10上也能使用. 在CMD中可以使用mklink指令来创建链接. 直接敲入这个指令可以看到使用帮助信息:


创建符号链接。

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

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

回到我的需求来, 直接为编译.java文件产生的.class文件创建硬链接即可, 如下所示:

mklink /H PDDistObj.class E:\WorkSpace\nonuniform-analysis\nonuniform-analysis\matlabcode\src\PDDistObj.class

我对于文件的软链接和硬链接的理解是:
软链接是另一个文件, 作用可以理解为一个指针, 作用在这个文件上的操作除了删除都直接转向实际指向文件, 由于是一个真实的文件所以占用磁盘空间
硬链接可以认为不是一个文件, 它只是实际文件的一个别名, 它的作用是防止真实文件被误操作, 给一个文件建立硬链接后, 他们互为别名, 删除其中任意一个,
这样用rm命令只会删除该别名, 实际文件并不会被删除. 只有链接数为0时, 才会删除原始文件. 参考博客

注记: 如果要硬链接.dll或者.lib这些文件的话, 一般来说库和项目不会处于同一个驱动器, 此时无法使用硬链接, 只能使用/D或者/J来摆脱不同驱动器的限制. 然而, 这种情况下, .exe貌似无法识别创建出来的软链接文件, 这是需要注意的一点.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注