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