La tête attend la fin de l'impression avant d'imprimer

1

Quand on court

ls | head

head semble attendre la sortie complète de la commande piped avant d’imprimer à l’écran. Cela n'est pas souhaitable lorsque l'exécution de la commande prend beaucoup de temps, par exemple lorsque vous exécutez ls sur un répertoire contenant des millions de fichiers.

Cependant, quand on court

find | head

head n'attend PAS la totalité de la sortie avant de commencer à imprimer à l'écran - il le fait en temps qui semble être en temps réel.

Ma question est la suivante: quelle est la différence entre find et ls qui cause cette différence de comportement? Deuxièmement, existe-t-il une commande de remplacement (que ce soit pour ls, ou pour head) qui me permettrait de prendre instantanément la tête d’une longue liste de répertoires?

Shadyjames
la source

Réponses:

1

Ce n'est pas head la faute; ses ls 's ls presque toujours trie sa sortie (par défaut, par nom; sur demande, par date). Et il est dans la nature de toute sorte qu'il ne peut produire aucune sortie jusqu'à ce qu'il ait lu la totalité de l'entrée. find ne trie pas sa sortie, il peut donc commencer à produire plus rapidement.

Vous auriez pu le constater vous-même simplement en exécutant

ls

et

find

et en observant la différence de temps de réponse.

BTW, vous pouvez obtenir ls pour lister les répertoires sans trier en spécifiant -U.

Scott
la source
je pense ls -f demanderait une sortie non triée?
grawity
Oui, ls -f demande également une sortie non triée. Cela force aussi le -a option. Je me rappelle vaguement avoir rencontré une version de ls dans lequel -f n'a pas fonctionné (je pense que cela a été défini comme étant autre chose) mais -U l’ai fait (mais je ne me souviens plus où c’était, et je me souviens peut-être mal). Et, à bien y penser, je suppose que j'ai entendu dire que -U n'est pas accepté partout.
Scott