desenv-web-rp.com

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

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

Eu tenho visto:

ls | head -4

mas para que head ou tail sejam executados, 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 limite sem usar esse comando head.

104
AndreDurao

Você tentou

ls -U | head -4

Isso deve pular a classificação, e provavelmente é por isso que ls está demorando tanto.

https://stackoverflow.com/questions/40193/quick-ls-command

125
niko

Se sua versão de ls tiver uma maneira de não classificar arquivos, como -U para GNU ls , use-o. Sem opção, ls primeiro lê todos os arquivos, depois classifica os nomes e começa a imprimir.

Outra possibilidade é executar find, que imprime nomes como os encontra.

find . -name . -o -Prune | head

(observe que como head está trabalhando em linhas , que assume que os nomes dos arquivos não contêm caracteres de nova linha).

12

Talvez você precise de uma ferramenta diferente de ls?

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

Na publicação do 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.

4
AFresh1

Se o desempenho não for a preocupação (como na pergunta que foi fechada como duplicata deste) e você desejar 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 4 primeiros arquivos. zsh ainda lerá o conteúdo completo do diretório, mesmo que você não ordene com *(oN[1,4]) (observe que lstambém classifica essa lista).

3
Stéphane Chazelas
$ cut -f 1,n filename

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

$ ls|cut -f 1,n file
0
Ramandeep Singh

Talvez menos seja mais adequado para suas necessidades?

 ls /usr/bin | less

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

Você pode finalizar less prematuramente com q.

Eu acho que sua suposição sobre a origem do atraso do 1s está errada, mas talvez dependa do seu sabor Unix ou do seu Shell, menos ou comando principal.

No Linux, com GNU-ls,

 ls -R /usr | less 

começa a produzir imediatamente para mim, enquanto toda a produção está em execução e em execução - portanto, definitivamente não está concluída, antes que menos sejam iniciadas. Você pode verificar se possui um atraso constante de 1s ou mais, dependendo da saída ou não.

Eu acho que seu atraso de 1s tem um motivo diferente, talvez o HDD esteja indo dormir e precise ser ativado?

Você tem esse atraso para muito poucos arquivos também?

0
user unknown
ls -lrth | tail

ls -lrth | tail -n 10

ls -lrth | grep *.gz | tail
0
Abhishek