Eu tenho um diretório com cerca de 100.000 arquivos. ls -f trava por mais de um minuto. Corri strace, e imediatamente comecei a ver getdents, então ls está claramente lendo o diretório. Também vejo muitas chamadas para brk, então ls está claramente protegendo as coisas na memória. Eu escrevi um programa simples que chama readdir e gera nomes de arquivos, e ele responde imediatamente. Mas ls -f não fornece saída. O que da? Eu pensei que o ponto principal de -f é que ele faz com que o ls não faça nada além de readdir. Existe uma maneira portátil e confiável de listar o conteúdo de um diretório? (Note, isto é sl dos coreutils do gnu no Linux.)
-EDITAR-
Havia um alias no lugar, mas "/ bin / ls -1f> / dev / null" leva de 8 a 15 segundos, "/ bin / ls -1fx> / dev / null" leva de 4 a 11 segundos, mas um programa simples isso apenas readdir leva 0,011 segundos. O que preciso fazer para que os gnus não sejam ruins?
Uma otimização foi adicionada no coreutils 7.0 (commit 8d974b00fbbc2025de63e1e6d54827648fefa1c4):
A primeira explicação que vem à mente é que você está executando uma versão mais antiga do coreutils. Você precisa atualizar.
fonte