在 Linux 上,我想用 powershell 替换 bash 脚本。该脚本需要测试文件以确定它是否是符号链接。在 bash 中,可以使用运算符-L
:
if [[ -L "/tmp/mysteryfile" ]] ; then ; echo "It is a link" ; fi
如何在 Linux 上的 powershell 中执行相同操作?
答案1
在我的 Ubuntu 19.04 上:
PS> gci /bin/bz*|select Mode,LastWriteTime,Length,Name,Attributes,LinkType|ft -auto
产量
Mode LastWriteTime Length Name Attributes LinkType
---- ------------- ------ ---- ---------- --------
--r--l 04.07.19 14:50:14 38984 bzcat ReadOnly HardLink
-----l 04.07.19 14:50:14 6 bzcmp ReparsePoint SymbolicLink
--r--- 04.07.19 14:50:14 2227 bzdiff ReadOnly
-----l 04.07.19 14:50:14 6 bzegrep ReparsePoint SymbolicLink
--r--- 13.08.18 13:29:27 4877 bzexe ReadOnly
-----l 04.07.19 14:50:14 6 bzfgrep ReparsePoint SymbolicLink
--r--- 04.07.19 14:50:14 3641 bzgrep ReadOnly
--r--l 04.07.19 14:50:14 38984 bzip2 ReadOnly HardLink
--r--- 04.07.19 14:50:14 14328 bzip2recover ReadOnly
-----l 04.07.19 14:50:14 6 bzless ReparsePoint SymbolicLink
--r--- 04.07.19 14:50:14 1297 bzmore ReadOnly
因此,模式l
表示一个链接,属性ReparsePoint
表示一个符号链接。
但只有 LinkType 可以区分硬链接和符号链接
if((Get-Item "/tmp/mysteryfile").LinkType -eq 'SymbolicLink'){"It is a SymbolicLink"}
或者
if($LT=(Get-Item "/tmp/mysteryfile").LinkType){"It is a $LT"}
查看一些统计数据:
PS> gci /bin -rec -force -ea 0|Where LinkType|Group LinkType -NoElement
Count Name
----- ----
3 HardLink
276 SymbolicLink