Comment vérifier si un file est un lien symbolique vers un directory?

Je peux vérifier, si un file existe et est un lien symbolique avec -L

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

et si c'est un directory avec -d:

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

Mais comment puis-je tester uniquement les liens vers les directorys?


J'ai simulé tous les cas dans un dossier de test:

 /tmp/test# ls abc/ 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' 

Il suffit de combiner les deux tests avec && :

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

Voici une seule command qui listra récursivement les liens symboliques dont la cible est un directory (commençant dans le directory courant):

find . -type l -xtype d

Référence: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories

Une solution avec find et utiliser une fonction:

 dosomething () { echo "doing something with $1"; } find -L -path './*' -prune -type d| while read file; do if [[ -L "$file" && -d "$file" ]]; then dosomething "$file"; fi; done