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 si c'est 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 des 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'
shopt -s dotglob
[[
comme point de départ logique. Une discussion sur les mérites de[
vs[[
est hors de portée pour cette réponse (mais disponible ici ).Voici une commande unique qui listera de manière récursive les liens symboliques dont la cible est un répertoire (commençant dans le répertoire actuel):
find . -type l -xtype d
Référence: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories
la source
Une solution avec
find
et en utilisant une fonction:la source
find
etwhile read
pour ça, c'est un peu exagéré ...