If you mean you want all the files of type directory that are not the target of the shortcut symlink, with zsh:
#! /bin/zsh -
printf '%s\n' *(/^e'{[[ $REPLY -ef shortcut ]]}')
- (...): glob qualifier, to further filter files based on other criteria than just name
- /: only files of type directory
- ^: negate the following glob qualifiers
- e'{shell code}': select files based on the result (exit status) of the evaluation of the- shell code(where the files being considered is in- $REPLY)
- [[ x -ef y ]]: returns true if- xand- ypoint to the same file (after symlink resolution). Typically, it does that by comparing the device and inode number of both files (obtained with a- stat()system call that resolves symlinks).
With GNU find (list not sorted, file names prefixed with ./):
#! /bin/sh -
find -L . ! -name . -prune -xtype d ! -samefile shortcut
- -L: for symlinks, the target of the symlink is considered. That's needed for- -samefileto do the same thing as- zsh's- -efabove.
- ! -name . -prune: prune any file but- .. Same as- -mindepth 1 -maxdepth 1but shorter and standard.
- -xtype d: now that- -Lis on, we need- -xtypeto match the type of the original file before symlink resolution:
- -samefile shortcut: true if the file is the same as- shortcut(after symlink resolution with- -L)
To list all directories except those that are the target of any of the symlinks in the current directories:
#! /bin/zsh -
zmodload zsh/stat
typeset -A ignore
for f (*(N@-/)) {
   zstat -H s -- $f &&
     ignore[$s[device]:$s[inode]]=1
}
printf '%s\n' *(/^e'{zstat -H s -- $REPLY && ((ignore[$s[device]:$s[inode]]))}')
Note that the zsh-bases ones ignore the hidden files. Add the D glob qualifier or set the dotglob option to consider them.