Head aguarda stdin completo antes de imprimir

1

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, por exemplo, quando você está executando ls em um diretório contendo milhões de arquivos.

No entanto, quando alguém executa

find | head

A cabeça NÃO aguarda a saída completa antes de começar a imprimir na tela - ela faz no que parece ser em tempo real.

Minha pergunta é: qual é a diferença entre o find e o ls que causa essa diferença no comportamento? Em segundo lugar, há um comando de substituição (para ls, OR para head) que me permitiria instantaneamente tomar a liderança de uma longa lista de diretórios?

    
por Shadyjames 13.03.2015 / 01:53

1 resposta

1

Não é culpa do head ; é ls . ls quase sempre classifica sua saída (por padrão, por nome; se solicitado, por data). E é da natureza de qualquer tipo que não pode produzir qualquer saída até que leia toda a entrada. find não classifica sua saída, então pode começar a produzir mais rápido.

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 obter ls para listar diretórios sem classificar, especificando -U .

    
por 13.03.2015 / 07:06