Назад | Перейти на главную страницу

Как Iinux PowerShell проверить, является ли файл символической ссылкой?

В 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