it-swarm.com.de

Wie überprüfe ich, ob eine Datei ein symbolischer Link zu einem Verzeichnis ist?

Ich kann überprüfen, ob eine Datei vorhanden ist und eine symbolische Verknüpfung mit -L darstellt

for file in *; do
    if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done

und wenn es ein Verzeichnis mit -d ist:

for file in *; do
    if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done

Aber wie kann ich nur nach Links zu Verzeichnissen suchen?


Ich habe alle Fälle in einem Testordner simuliert:

/tmp/test# ls
a  b  c/  [email protected]  [email protected]  [email protected]

/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'
73
rubo77

Kombinieren Sie einfach die beiden Tests mit &&:

if [[ -L "$file" && -d "$file" ]]
then
    echo "$file is a symlink to a directory"
fi
88
user27282

Hier ist ein einzelner Befehl, der rekursiv Symlinks auflistet, deren Ziel ein Verzeichnis ist (beginnend mit dem aktuellen Verzeichnis):

find . -type l -xtype d

Referenz: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories

8
Mark Edington

Eine Lösung mit find und unter Verwendung einer Funktion:

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
1
rubo77