Bash

如何檢查文件是否是目錄的符號連結?

  • January 9, 2022

我可以檢查文件是否存在並且是帶有 -L 的符號連結

for file in *; do
   if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done

如果它是帶有-d的目錄:

for file in *; do
   if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done

但是我怎樣才能只測試到目錄的連結呢?


我模擬了一個測試文件夾中的所有案例:

/tmp/test# ls
a  b  c/  d@  e@  f@

/tmp/test# file *
a: ASCII text
b: ASCII text
c: directory
d: symbolic link to `c'
e: symbolic link to `a'
f: broken symbolic link to `nofile'

只需將這兩個測試與&&

if [[ -L "$file" && -d "$file" ]]
then
   echo "$file is a symlink to a directory"
fi

或者,對於 POSIX 兼容語法,使用:

if [ -L "$file" ] && [ -d "$file" ]
...

注意:第一個語法 using[[ expr1 && expr2 ]]是有效的,但僅適用於某些 shell,例如 ksh(它來自哪裡)、bash 或 zsh。使用的第二種語法[ expr1 ] && [ expr2 ]是 POSIX 兼容的,甚至是 Bourne 兼容的,這意味著它可以在所有現代shsh類似的 shell中工作

這是一個命令,它將遞歸列出目標是目錄的符號連結(從目前目錄開始):

find . -type l -xtype d

參考: http: //www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories

引用自:https://unix.stackexchange.com/questions/96907