Quando alguém corre
ls | head
head parece esperar pela saída completa do comando canalizado antes de imprimir na tela. Isso é indesejável quando o comando leva muito tempo para ser executado, como quando você está executando ls em um diretório que contém milhões de arquivos.
Porém, quando alguém corre
find | head
head NÃO espera pela saída completa antes de começar a imprimir na tela - ele faz isso no que parece ser em tempo real.
Minha pergunta é a seguinte: Qual é a diferença entre find e ls que causa essa diferença de comportamento? Em segundo lugar, existe um comando de substituição (para ls ou para head) que me permitiria assumir instantaneamente o cabeçalho de uma longa listagem de diretórios?
Responder1
Não é head
culpa dele; é ls
isso.
ls
quase sempre classifica sua saída (por padrão, por nome; se solicitado, por data). E é da natureza de qualquer tipo que ele não possa produzir nenhuma saída até que tenha lido toda a entrada.
find
não classifica sua saída, para que possa começar a produzir mais rapidamente.
Você poderia ter visto isso por si mesmo simplesmente executando
ls
e
find
e observando a diferença no tempo de resposta.
BTW, você pode ls
listar diretórios sem classificar especificando -U
.