Como excluo diretórios ao listar arquivos no diretório atual?
ls .
^ incluirá diretórios na lista.
Como excluo diretórios ao listar arquivos no diretório atual?
ls .
^ incluirá diretórios na lista.
Respostas:
Tente este:
find . -maxdepth 1 -not -type d
ls .
sem diretórios - e aqui está.
-ls
ou -exec ls -l {} \;
faria isso ls -l
sem diretórios.
Para obtê-lo exatamente equivalente a ls .
você, 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 acho que é meio feio. Eu fui com:
ls -p | grep -v '/$'
E isso fornecerá uma listagem com a mesma aparência e você também poderá adicionar ls
argumentos adicionais . Adicione um --color=always
e você recuperará as suas cores ou -a
verá os arquivos ocultos.
Eu gosto da resposta de Alexander, porque ele realmente depende de uma característica do sistema de arquivos do arquivo em questão, para que nunca seja enganado. Minha resposta será enganada por um arquivo que tenha um '/' como o último caractere em seu nome. Mas isso parece estar pedindo problemas.
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, caracteres e arquivos de bloco.
As soluções "localizar" acima perdem alguns dos recursos do ls - por exemplo: liste apenas arquivos, classificados no tempo de modificação decrescente.
As respostas "ls -p | grep" não lidam elegantemente com outros elementos de ls como -R, caso desejem
A resposta a seguir, embora mais detalhada, na minha opinião reflete o comportamento ls mais verdadeiro e a maior flexibilidade para selecionar "apenas arquivos"
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Simplesmente substitua as opções ls conforme desejado e o resultado será retornado apenas com arquivos. Se links e outros itens também forem necessários, um pequeno retrabalho precisará ser feito no teste de inclusão.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Com isso, você ainda pode usar outras opções ls
normalmente necessárias. Ou ... remova -v
para listar apenas diretórios. Ou ... substitua o diretório por qualquer outro tipo de arquivo que file
compreenda e relate, como ASCII, vazio, ELF e assim por diante.
ls -t .|while read f;do [ -f "$f" ]&& echo $f;done
é cerca de 3x mais rápido nos meus testes
Eu estava em um sistema em que o find
binário não suportava -not
e acabei usando:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Vantagens: Não depende de nada além de sh ls echo
É compatível com bash e dash
Pode ser alterado para corresponder a outras coisas (como diretórios), alterando -f
É mais rápido que algumas das respostas e usa menos RAM e CPU