Existe uma maneira de limitar a quantidade de arquivos listados em um ls
comando?
Eu tenho visto:
ls | head -4
mas para obter head
ou tail
ser executado, preciso aguardar o ls
término da execução e com diretórios com uma quantidade enorme de arquivos que podem levar um tempo considerável.
Desejo executar um ls
comando que limite sem usar esse head
comando.
command-line
ls
limit
AndreDurao
fonte
fonte
ls -U
não lê necessariamente todo o diretório antes de imprimir. Tentestrace -e getdents,write ls -U > /dev/null
em um diretório grande, por exemplo.Se a sua versão do
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 começará a imprimir.Outra possibilidade é executar
find
, que imprime nomes à medida que os encontra.(observe que, como
head
está trabalhando nas linhas , assume que os nomes dos arquivos não contêm caracteres de nova linha).fonte
find
(em oposição ao busybox, herançafind
ou GNUls -U
), parece que ele lê todo o diretório antes de começar a imprimir.Talvez você precise de uma ferramenta que não seja
ls
?Por exemplo, Randal Schwartz tem uma entrada de blog sobre o uso
perl
em diretórios grandes que podem conter algumas dicas sobre como criar algo que atenda às suas necessidades.Na postagem do blog, Randal explica isso
ls
efind
tenta ler todas as entradas do diretório antes de imprimir qualquer, enquanto aperl
solução que ele propõe não.fonte
perl
provavelmente usareaddir(3)
likels
oufind
.readdir(3)
nas versões atuais do GNU / Linux, pelo menos, chama a chamada dogetdents()
sistema com uma contagem grande (que geralmente otimiza o desempenho, reduzindo o número de chamadas do sistema sendo feitas). Mas no seu caso, se você quiser menos arquivos, parece que você precisará ignorarreaddir
e usar BSDsgetdirentries(3)
ou agetdents(2)
chamada do sistema.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 ocultos classificados por nome de arquivo, comzsh
, você pode usar:para listar os 4 primeiros arquivos.
zsh
ainda lerá o conteúdo completo do diretório, mesmo que você não o ordene*(oN[1,4])
(observe quels
também classifica essa lista).fonte
Talvez menos seja mais adequado às suas necessidades?
Para mim, ele 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 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 head.
No Linux, com GNU-ls,
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 o seu atraso de 1s tem um motivo diferente, talvez o HDD vá dormir e precise de um despertador?
Você também tem um atraso para muito poucos arquivos?
fonte
ls
resultado. Eu estava procurando uma maneira de si mesmo para limitar a quantidade de resultados.fonte
ls
comando no bash. Canalizado comandos comogrep
,head
,tail
ou outros são executadas após als
fará a tarefa de buscar os primeiros
n
arquivos.n
é o número de arquivos que você deseja extrair. o código completo será:fonte
ls | cut -f 1,n file
comando que você sugeriu produziria o primeiro e o enésimo campo em cada linha de textofile
e ignoraria completamente a saída dels
. Isso não faz o que o pôster original precisa.