如何实现linux与windows软链接底层兼容?

即,将一个linux软链接拷贝到win环境下,在文件不被做任何修改的情况下,win依然能够使用比链接,请问如何实现?

这个问题很高端,也很棘手,有什么想法一起讨论讨论。

阅读 14.5k
3 个回答

最近刚好看到Git for Windows加了软链接支持,可用把git clone当作是一种复杂的文件复制吧。

在linux下:

mkdir symbolic-link-test
cd symbolic-link-test
git init
touch readme.md
ln -s readme.md link-to-readme.md
git add .
git commit -m "init"

然后提交到github,再在windows下用管理员权限git clone下来:

git clone -c core.symlinks=true git@xxxxx/symbolic-link-test.git

结果:

git clone

向link-to-readme.md写内容会出现在readme.md(用powershell):

powershell下向link-to-readme.md写内容

Mode里有l:

图片描述

所以复制软链接拷是可以的,大概流程:

  1. copy时记录linux下软连接的信息,例如这是个软链、指向那个文件

  2. paste到windows时,根据保存的软连接信息用Windows的Symbolic link重建文件

一点补充:如果是只复制软链,不复制指向的文件,或者软链是绝对路径,这种方法是不行的。

不可能兼容吧,
你可以试下在windows里用ext2fsd挂载ext分区,复制里边的软链接文件出来用hex编辑器查看下内容,通过分析文件结构来解析,
要不就试试msys+mingw里能不能readlink读出来,
或者win10预览版可以装linux子系统(ubuntu),试下?

你应该考虑的是先在windows下挂载linux分区,然后尝试使用快捷方式或者mklink等方式从linux分区中创建一个指向连接,而不是考虑拷贝linux下已经创建好的软连接能够在windows下兼容。
理论上软连接是克服了硬链接在不同文件系统上的兼容问题的,我们可以在不同的文件分区甚至网络文件系统上创建软连接,但是考虑到windows和linux本身操作系统上的区别,你在linux下创建的软连接并不一定能保证在windows下能被正确识别并引用。所以,还是别考虑复制了,如果真有需要,试试直接挂载分区,然后用mklink从linux分区创建一个软连接到windows吧!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题