Você já tentou
ls -U | head -4
Isso deve pular a classificação, o que provavelmente é o motivo pelo qual ls
está demorando tanto.
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
.
Você já tentou
ls -U | head -4
Isso deve pular a classificação, o que provavelmente é o motivo pelo qual ls
está demorando tanto.
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).
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.
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).
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?
ls -lrth | tail
ls -lrth | tail -n 10
ls -lrth | grep *.gz | tail
$ 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
Tags command-line ls limit