Je peux vérifier si un fichier 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 s'il s'agit d'un répertoire 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 répertoires?
J'ai simulé tous les cas dans un dossier de test:
/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'
Combinez simplement les deux tests avec &&
:
if [[ -L "$file" && -d "$file" ]]
then
echo "$file is a symlink to a directory"
fi
Voici une seule commande qui listera récursivement les liens symboliques dont la cible est un répertoire (commençant dans le répertoire 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 utilisant 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