Veja 'EXPRESSÕES CONDICIONAIS' em man bash - em Nesse caso, você quer -h :
for file in *
do
if [ -h "$file" ]; then
echo "$file"
fi
done
A pergunta está relacionada ao shell-scripting em bash .
Como verificar com um script quais arquivos dentro do diretório atual são soft links?
Caso eu tenha usado o termo errado, quando eu disser soft links , refiro-me aos arquivos criados usando ln -s .
A única coisa que consegui pensar é avaliar ls -la como uma expressão e analisar seus resultados, mas obviamente essa não é a melhor solução.
Veja 'EXPRESSÕES CONDICIONAIS' em man bash - em Nesse caso, você quer -h :
for file in *
do
if [ -h "$file" ]; then
echo "$file"
fi
done
Você pode não precisar de um script. Para mostrar links simbólicos apenas na pasta atual, sem recursar em nenhuma pasta filha:
find . -maxdepth 1 -type l -print
Ou, para obter mais informações, use um destes:
find . -maxdepth 1 -type l -exec ls -ld {} +
find . -maxdepth 1 -type l -print0 | xargs -0 ls -ld
Para dizer se um arquivo é um link simbólico, pode-se usar readlink , que não produzirá nada se não for um link simbólico. O exemplo a seguir não é muito útil, mas mostra como readlink ignora arquivos e pastas normais. Use um dos:
find . -maxdepth 1 -exec readlink {} +
find . -maxdepth 1 -print0 | xargs -0 readlink
Observe que os -exec ... + e xargs ... acima são muito mais rápidos que -exec ... \; . Como:
time find /usr/bin -maxdepth 1 -type l -exec ls -ld {} \;
real 0m0.372s
user 0m0.087s
sys 0m0.163s
time find /usr/bin -maxdepth 1 -type l -exec ls -ld {} +
real 0m0.013s
user 0m0.004s
sys 0m0.008s
time find /usr/bin -maxdepth 1 -type l -print0 | xargs -0 ls -ld
real 0m0.012s
user 0m0.004s
sys 0m0.009s
Tags bash symbolic-link ls shell-script ln