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