Se todos os alvos de links simbólicos forem absolutos, você pode fazer algo assim:
find /folder/tree -type l -not -lname '/folder/tree/*' -print
No entanto, se você tiver links relativos em sua árvore, especialmente aqueles com ./
ou ../
incorporado nos caminhos de destino, provavelmente será necessário percorrer cada um deles para normalizar o destino e ver se corresponde à árvore de pastas:
find /folder/tree -type l -print | \
while read symlink
do
target=$(readlink -f "$symlink")
expr match "$target" "^/folder/tree/.*" >/dev/null || echo "$symlink"
done
# end of pipeline
Ambos fazem a mesma coisa, que é imprimir cada link simbólico que tem um alvo que não corresponde a /folder/tree
.