Siehe 'CONDITIONAL EXPRESSIONS' in man bash
- in diesem Fall möchten Sie -h
:
for file in * do if [ -h "$file" ]; then echo "$file" fi done
Die Frage bezieht sich auf das Shell-Scripting in bash
.
Wie kann mit einem Skript überprüft werden, welche Dateien im aktuellen Verzeichnis Softlinks sind?
Falls ich den falschen Begriff verwendet habe, wenn ich Softlinks sage, beziehe ich mich auf Dateien, die mit erstellt wurden ln -s
.
Das einzige, woran ich denken konnte, ist, ls -la
als Ausdruck zu bewerten und seine Ergebnisse zu analysieren, aber offensichtlich ist dies nicht die beste Lösung.
Siehe 'CONDITIONAL EXPRESSIONS' in man bash
- in diesem Fall möchten Sie -h
:
for file in * do if [ -h "$file" ]; then echo "$file" fi done
Sie benötigen möglicherweise kein Skript. So zeigen Sie symbolische Links nur im aktuellen Ordner an, ohne in einen untergeordneten Ordner zu rekursieren:
finden . -maxdepth 1-typ l -print
Um weitere Informationen zu erhalten, verwenden Sie eine der folgenden Optionen:
finden . -maxdepth 1-type l -exec ls -ld {} + finden . -maxdepth 1-typ l -print0 | xargs -0 ls -ld
Um festzustellen, ob eine Datei ein symbolischer Link ist, kann man verwenden readlink
, der nichts ausgibt, wenn es sich nicht um einen symbolischen Link handelt. Das folgende Beispiel ist nicht sehr nützlich, zeigt jedoch, wie readlink
normale Dateien und Ordner ignoriert werden. Verwenden Sie eines von:
finden . -maxdepth 1 -exec readlink {} + finden . -maxdepth 1 -print0 | xargs -0 readlink
Beachten Sie, dass die oben genannten -exec ... +
und xargs ...
sind viel schneller als -exec ... \;
. Mögen:
Zeit find / usr / bin -maxdepth 1-type l -exec ls -ld {} \; echte 0m0.372s Benutzer 0m0.087s sys 0m0.163s Zeit find / usr / bin -maxdepth 1-type l -exec ls -ld {} + echte 0m0.013s Benutzer 0m0.004s sys 0m0.008s Zeit find / usr / bin -maxdepth 1-type l -print0 | xargs -0 ls -ld echte 0m0.012s Benutzer 0m0.004s sys 0m0.009s