Mogę sprawdzić, czy plik istnieje i jest dowiązaniem symbolicznym z -L
for file in *; do
if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done
a jeśli jest to katalog z opcją -d:
for file in *; do
if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done
Ale jak mogę przetestować tylko linki do katalogów?
Symulowałem wszystkie przypadki w folderze testowym:
/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
[[
, i wziąłem to jako logicznego punktu wyjścia. Omówienie zalet[
vs nie[[
mieści się w tej odpowiedzi (ale dostępne tutaj ).Oto jedno polecenie, które rekurencyjnie wyświetli dowiązania symboliczne, których celem jest katalog (zaczynając od bieżącego katalogu):
find . -type l -xtype d
Odniesienie: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories
źródło
Rozwiązanie z
find
funkcją i za pomocą:źródło
find
iwhile read
do tego jest trochę przesadzone ...