Bash
如何檢查文件是否是目錄的符號連結?
我可以檢查文件是否存在並且是帶有 -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 兼容的,這意味著它可以在所有現代sh
和sh
類似的 shell中工作
這是一個命令,它將遞歸列出目標是目錄的符號連結(從目前目錄開始):
find . -type l -xtype d
參考: http: //www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories