Я могу проверить, существует ли файл и является ли он символической ссылкой с -L
for file in *; do
if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done
и если это каталог с -d:
for file in *; do
if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done
Но как я могу проверить только ссылки на каталоги?
Я смоделировал все случаи в тестовой папке:
/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
[[
, и я принял это за логическую отправную точку. Обсуждение достоинств[
vs[[
выходит за рамки этого ответа (но доступно здесь ).Вот одна команда, которая будет рекурсивно перечислять символические ссылки, целью которых является каталог (начиная с текущего каталога):
find . -type l -xtype d
Ссылка: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories
источник
Решение с
find
использованием функции:источник
find
иwhile read
для этого является своего рода излишним ...