Question: I can check, if a file exists and is a symbolic link with -L

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

```

and if it is a directory with -d:

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

```

But how can I test for only links to directories?

---

I simulated all cases in a test folder:

```
/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'

```

Answer: 
Here is a single command which will recursively list symlinks whose target is a directory (starting in the current directory):

`find . -type l -xtype d`

Reference: <http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories>
A solution with `find` and using a function:

```
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

```