Symlink

Windows 先了解 mklink; Linux 先了解 ln。 下文主要关注 Windows。

PowerShell 5 开始支持链接,跟 mklink 有一些不同。

创建链接

使用 New-Item 创建链接

PowerShell 在创建 SymbolicLink 时

New-Item -ItemType SymbolicLink -Path .\a -Value .\d

PowerShell 目前不支持 relative target, issue

查看链接的属性

Get-ItemProperty .\t.txt | format-list
Get-ItemPropertyValue .\t.txt -Name LinkType
Get-ItemPropertyValue .\t.txt -Name Target

删除链接

使用 Remove-Item 删除 links,跟删除 file 一样。删除 symbolic link,不需要管理员权限。

在删除 links 时,通常我们只是想删除 links 而不要删除它的 target。

Remove-Item -Recurse on symlink should recurse when path ends with path separator · Issue #3674 · PowerShell/PowerShell

PowerShell 5

删除 junction link

Remove-Item path\to\junction -Recurse -Force

删除 directory symbolic link

[System.IO.Directory]::Delete("path\to\symlink", $true)
cmd /c "rmdir path\to\symlink"

FAQ

对于 HardLink,上面得到的 Target 为空,那么怎么查找 HardLink 的 Target ?解决方案是使用第三方工具。

比如 FindLinks

FindLinks.exe -accepteula -nobanner .\t.txt

或者使用 ln,注意不是 Linux 的 ln,只是名字一样而已

ln.exe --list .\t.txt
# v6.0.0-beta.4
Get-ChildItem -FollowSymlink