Como eu excluo diretórios ao listar arquivos?

15

Como excluo diretórios ao listar arquivos no diretório atual?

ls .

^ incluirá diretórios na listagem.

    
por Stephen Watkins 10.03.2012 / 19:37

6 respostas

20

Tente este:

find . -maxdepth 1 -not -type d
    
por 10.03.2012 / 19:42
12

Para obter exatamente o equivalente a ls . , não é necessário mostrar diretórios ocultos.

find . -maxdepth 1 -not -type d -and -not -name '.*'

e isso ainda deixa você com './' prefixado em cada nome de arquivo. Isso não é realmente um problema, mas eu acho que é meio feio. Eu fui com:

ls -p | grep -v '/$'

E isso vai te dar uma listagem que parece a mesma, e você pode adicionar mais argumentos ls também. Adicione um --color=always e você obterá seus dircolors de volta ou -a para ver os arquivos ocultos.

Eu gosto da resposta de Alexander porque ele está realmente dependendo de uma característica de sistema de arquivos do arquivo em questão para que não seja enganado nunca. Minha resposta será enganada por um arquivo que tenha um '/' como o último caractere em seu nome. Mas parece que está pedindo por problemas.

    
por 10.03.2012 / 21:11
5

tente isto:

$ find . -type f -maxdepth 1

ou isto:

$ ls -p | egrep -v /$

$ ls -la | egrep -v ^d

    
por 10.03.2012 / 20:24
2

Embora seja um post antigo, mas achei que isso poderia ajudar ...

$ ls -l | grep -v ^ d

Ele listará todos os arquivos, incluindo links simbólicos, arquivos de caracteres e blocos.

    
por 29.09.2013 / 20:02
2

As soluções "find" acima perdem algumas das capacidades de ls - por exemplo: listar apenas arquivos, classificados em hora de modificação decrescente.

As respostas "ls -p | grep" não lidam elegantemente com outros elementos de ls, como -R, caso sejam desejados

A resposta a seguir, embora mais detalhada, na minha opinião, reflete o comportamento mais verdadeiro ls e a maior flexibilidade para selecionar "somente arquivos"

ls -t . | while read line; do
  if [ -f $line ]; then
    echo $line
  fi 
done

Simplesmente substitua os comutadores ls conforme desejado e o resultado será retornado apenas com arquivos. Se links e outros itens também forem necessários, será necessário fazer um pequeno retrabalho no teste para inclusão.

    
por 23.04.2015 / 01:42
0
ls $(file --no-pad  -F' '  * | grep -v directory | cut -d' ' -f1)

Com isso, você ainda pode usar outras opções que o ls normalmente leva. Ou ... remova -v para listar apenas diretórios. Ou ... substitua o diretório por qualquer outro tipo de arquivo que file entenda e relate, como ASCII, vazio, ELF e assim por diante.

    
por 29.09.2013 / 15:56

Tags