Posso verificar se existe um arquivo e é um link simbólico com -L
for file in *; do
if [[ -L "$file" ]]; then echo "$file is a symlink"; else echo "$file is not a symlink"; fi
done
e se for um diretório com -d:
for file in *; do
if [[ -d "$file" ]]; then echo "$file is a directory"; else echo "$file is a regular file"; fi
done
Mas como posso testar apenas links para diretórios?
Simulei todos os casos em uma pasta de teste:
/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
[[
, e tomei isso como ponto de partida lógico. Uma discussão sobre o mérito de[
vs[[
está fora do escopo desta resposta (mas disponível aqui ).Aqui está um único comando que lista recursivamente os links simbólicos cujo destino é um diretório (iniciando no diretório atual):
find . -type l -xtype d
Referência: http://www.commandlinefu.com/commands/view/6105/find-all-symlinks-that-link-to-directories
fonte
Uma solução com
find
e usando uma função:fonte
find
ewhile read
para isso é um bocado exagero ...