Head espera por stdin completo antes de imprimir

Head espera por stdin completo antes de imprimir

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 é headculpa dele; é lsisso.  lsquase 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.  findnã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 lslistar diretórios sem classificar especificando -U.

informação relacionada