在 Windows/WSL 下检测 Linux NTFS 符号链接

在 Windows/WSL 下检测 Linux NTFS 符号链接

在 Linux 中,NTFS 驱动器上创建的符号链接 ( ln -s) 在 Windows 中显示为包含内容的短文件IntxLNK + 0x01 + (UTF-16 encoded target path)- 可能英特里克。我想编写一个脚本,在 Windows 启动时使用 WSL 将它们转换为正确的 NTFS 符号链接ln。但是,我不知道如何检测实际上是 Linux 符号链接的短文件,除非查看每个文件的内容,这对于大型文件系统来说很糟糕,并且对于以 magic 开头的普通文件会失败。

为什么 NTFS-3g 仍然无法像 Windowsmklink或 WSL2那样创建正确的重解析点ln -s,即使这样的 Windows 符号链接在 Linux 下正常工作,即使getfattr -n system.ntfs_reparse_data可以读取 NTFS 符号链接数据,我还是不明白。它实际上应该只是一个简单的setfattr,虽然我不知道在属性中放什么。

那么,有没有办法使用文件元数据(而不是内容)来检测在 Linux 下创建的符号链接?我确信 Linux 符号链接具有一些特殊属性,因为 NTFS-3g 可以区分包含魔法的纯文件InterLnkx和包含相同魔法的实际符号链接。

相关(无答案):https://www.reddit.com/r/linuxquestions/comments/env60r/converting_linux_symlinks_to_windows_symlinks/

Python 脚本转换;通过文件内容检测

答案1

ntfsinfo我通过比较两个文件(一个由 Linux 创建的符号链接和一个在 Windows 中创建的符号链接文件的副本)找到了答案。

它必须是系统文件(ATTRIB +S在 Windows 上,或者ntfs_attr.sh使用https://gist.github.com/Explorer09/ac4bf6838c271a9968b3在 Linux 上)。一旦打开系统属性,NTFS-3g 就会将文件视为符号链接,如果关闭,则文件将变为纯文件。所以... 开始编写脚本。

相关内容