Der Kopf wartet vor dem Drucken auf volle Wartezeit

422
Shadyjames

Wenn man läuft

ls | head 

head scheint auf die vollständige Ausgabe des Pipe-Befehls zu warten, bevor er auf dem Bildschirm gedruckt wird. Dies ist unerwünscht, wenn die Ausführung des Befehls sehr lange dauert, z. B. wenn Sie ls in einem Verzeichnis ausführen, das Millionen von Dateien enthält.

Wenn man jedoch läuft

find | head 

head wartet NICHT auf die vollständige Ausgabe, bevor mit dem Drucken auf dem Bildschirm begonnen wird - dies geschieht in einer scheinbar Echtzeit.

Meine Frage ist folgende: Was ist der Unterschied zwischen find und ls, der diesen Unterschied im Verhalten verursacht? Zweitens: Gibt es einen Ersetzungsbefehl (für entweder ls, OR für head), mit dem ich sofort den Kopf einer langen Verzeichnisliste übernehmen könnte?

1

1 Antwort auf die Frage

1
Scott

Es ist nicht headschuld; es ist lslsfast immer sortiert seine Ausgabe (standardmäßig nach Name; falls gewünscht, nach Datum). Es liegt in der Natur jeder Art, dass es keine Ausgabe erzeugen kann, bis es die gesamte Eingabe gelesen hat.  findsortiert seine Ausgabe nicht und kann daher schneller produzieren.

Sie hätten das einfach selbst beim Laufen sehen können

ls 

und

find 

und Beobachten des Unterschieds in der Antwortzeit.

Übrigens können Sie lsVerzeichnisse auflisten, ohne sie zu sortieren, indem Sie sie angeben -U.

Ich denke, 'ls -f' würde unsortierte Ausgaben anfordern? grawity vor 9 Jahren 0
Ja, `ls -f` fordert auch unsortierte Ausgaben an. Es erzwingt auch die Option "-a". Ich erinnere mich vage daran, eine Version von 'ls' gesehen zu haben, in der `-f nicht funktionierte (ich glaube, es wurde etwas anderes definiert), aber '-U' (aber ich erinnere mich nicht, wo das war und ich kann sich nur falsch erinnern). Ich denke, ich habe gehört, dass `-U` nicht überall akzeptiert wird. Scott vor 9 Jahren 0