Como limitar o número de arquivos impressos por ls?

72

Existe uma maneira de limitar a quantidade de arquivos listados em um comando ls ?

Eu vi:

ls | head -4

mas para executar head ou tail , preciso aguardar que ls termine a execução, e com diretórios com uma quantidade enorme de arquivos que podem levar um tempo considerável.

Desejo executar um comando ls que limita sem usar o comando head .

    
por AndreDurao 26.09.2011 / 21:44

7 respostas

85

Você já tentou

ls -U | head -4

Isso deve pular a classificação, o que provavelmente é o motivo pelo qual ls está demorando tanto.

link

    
por 26.09.2011 / 22:25
9

Se a sua versão de ls tiver uma maneira de não classificar arquivos, como -U para o GNU ls , use-o. Sem opção, ls primeiro lerá todos os arquivos, depois classificará os nomes e depois iniciará a impressão.

Outra possibilidade é executar find , que imprime os nomes conforme eles são encontrados.

find . -name . -o -prune | head

(note que desde que head está trabalhando em linhas , isso pressupõe que os nomes dos arquivos não contenham caracteres de nova linha).

    
por 27.09.2011 / 02:02
3

Talvez você precise de uma ferramenta diferente de ls ?

Por exemplo, Randal Schwartz tem uma entrada de blog sobre usando perl em diretórios grandes que podem conter algumas dicas sobre como criar algo que atenda às suas necessidades.

No blog, Randal explica que ls e find tentam ler todas as entradas do diretório antes de imprimir qualquer, enquanto a solução perl que ele propõe não o faz.

    
por 27.09.2011 / 01:51
2

Se o desempenho não é o problema (como na pergunta que foi fechada como uma duplicata deste), e você deseja listar os primeiros n arquivos (em oposição às primeiras n linhas da saída de ls ) na lista de arquivos não ocultos classificados por nome de arquivo, com zsh , você pode usar:

ls -ld -- *([1,4])

para listar os primeiros 4 arquivos. O zsh ainda lerá todo o conteúdo do diretório, mesmo que você diga para não classificar com *(oN[1,4]) (observe que ls também classifica essa lista).

    
por 14.05.2015 / 18:26
1

Talvez menos seja mais adequado às suas necessidades?

 ls /usr/bin | less

Para mim, funciona instantaneamente em um laptop de 5 anos com HDD clássico, mas a cabeça é igualmente rápida.

Você pode terminar less prematuramente com q .

Eu suponho que sua suposição sobre a fonte do atraso de 1s esteja errada, mas talvez dependa do seu comando Unix ou seu comando shell, less ou head.

No Linux, com o GNU-ls,

 ls -R /usr | less 

inicia a saída imediatamente para mim, enquanto toda a saída está sendo executada e executada - portanto, definitivamente não está finalizada, antes de iniciar menos. Você pode verificar, se você tem um atraso constante de 1s ou talvez mais, dependendo da saída ou não.

Eu acho que seu atraso de 1s tem um motivo diferente, talvez o HDD vá dormir e precise de um despertar?

Você tem tanto atraso para muito poucos arquivos?

    
por 24.01.2012 / 11:27
-2
ls -lrth | tail

ls -lrth | tail -n 10

ls -lrth | grep *.gz | tail
    
por 14.05.2015 / 21:56
-2
$ cut -f 1,n filename

fará a tarefa de buscar primeiro n arquivos. n é o número de arquivos que você deseja extrair. código tão completo será:

$ ls|cut -f 1,n file
    
por 29.05.2018 / 06:02