В Linux я хочу заменить сценарий bash на powershell. Сценарию необходимо протестировать файл, чтобы определить, является ли он символической ссылкой. В bash можно использовать -L
оператор:
if [[ -L "/tmp/mysteryfile" ]] ; then ; echo "It is a link" ; fi
Как я могу сделать то же самое в PowerShell в Linux?
На моем 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