Você pode usar os operadores de teste de arquivo documentados em man test . Por exemplo, para listar links simbólicos:
for i in *;do if [ -L "$i" ] ;then printf -- "%s\n" "$i";fi;done
Se você quiser listar apenas diretórios (no diretório atual) use ls -d */
E se você quiser listar apenas arquivos comuns, apenas arquivos executáveis, ou apenas links, ou arquivos de qualquer outro tipo?
Porque ls -F acrescenta * aos arquivos executáveis, @ aos arquivos simbólicos vinculados, / aos diretórios, tentei
ls -d ** e
ls -d *@ , mas eles não funcionam.
Você pode usar os operadores de teste de arquivo documentados em man test . Por exemplo, para listar links simbólicos:
for i in *;do if [ -L "$i" ] ;then printf -- "%s\n" "$i";fi;done
Você pode usar find .
Listar todos os arquivos:
find . ! -name . -prune -type f
Lista de todos os links simbólicos:
find . ! -name . -prune -type l
Listar todos os executáveis:
find . ! -name . -prune -type f -perm +111
Você pode ler a documentação POSIX do POSIX para obter mais opções avançadas.
Um comando como ls -d *@ lista os arquivos cujo nome termina com @ . O caractere @ faz parte do padrão que o nome do arquivo deve corresponder. Quando ls -F exibe um caractere após um nome de arquivo, esse caractere não faz parte do nome do arquivo, é uma indicação extra adicionada por ls (esse é o ponto da opção -F ).
ls não tem uma opção para selecionar os tipos de arquivos a serem listados. Se os nomes dos seus arquivos não contiverem caracteres especiais, como novas linhas ou os sufixos que ls -F adiciona, você poderá usar ls -F para listar determinados tipos de arquivos e filtrar sua saída. Por exemplo, para listar links simbólicos no diretório atual, você pode usar
ls -F | grep '@$'
Uma maneira mais robusta de listar arquivos de um tipo selecionado é com o comando find . Ao contrário de ls , find é recursivo; use a ação -prune para interromper a recursão. Outra diferença é que find não trata os arquivos cujo nome começa com . (arquivos de pontos) especialmente, enquanto ls os ignora, e padrões de shell como * também os ignoram. Por exemplo, o comando a seguir lista os links simbólicos no diretório atual:
find . -name . -o -type l -print -o -prune
Outra maneira de realizar a filtragem é fazer uma iteração de todos os arquivos em um loop e fazer um teste para selecionar o que você deseja.
for x in *; do
if [ -L "$x" ]; then echo "$x"; fi
done
No zsh, você pode usar os qualificadores para restringir os arquivos por tipo. Por exemplo, o seguinte comando zsh lista os links simbólicos no diretório atual:
print -rl *(@)
Eu sugiro considerar perl , porque ele tem um operador interno útil - grep . Que ao contrário da versão do comando, na verdade, permite um teste de 'bloco de código'.
Então você pode:
perl -e 'print join "\n", grep { -d } glob "$dir/*"'
O qual imprimirá arquivos correspondentes ao teste -d e a vários outros:
Digamos que você queira ver apenas os arquivos de origem c (sufixo .c) em uma lista:
ls -l *.c
Isso listará todos os arquivos de código c.
Aproveite
Tags ls