Wenn man rennt
ls | head
head scheint auf die vollständige Ausgabe des weitergeleiteten Befehls zu warten, bevor es 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 es mit dem Drucken auf dem Bildschirm beginnt – es geschieht scheinbar in Echtzeit.
Meine Frage ist folgende: Was ist der Unterschied zwischen find und ls, der dieses unterschiedliche Verhalten verursacht? Zweitens: Gibt es einen Ersatzbefehl (für ls ODER für head), mit dem ich sofort den Kopf einer langen Verzeichnisliste übernehmen kann?
Antwort1
Es ist nicht head
die Schuld von , sondern die ls
von .
ls
sortiert seine Ausgabe fast immer (standardmäßig nach Namen, auf Wunsch nach Datum). Und es liegt in der Natur jeder Sortierung, dass sie keine Ausgabe erzeugen kann, bis sie die gesamte Eingabe gelesen hat.
find
sortiert seine Ausgabe nicht, damit sie schneller mit der Erzeugung beginnen kann.
Sie hätten dies selbst feststellen können, indem Sie einfach
ls
Und
find
und beobachten Sie den Unterschied in der Reaktionszeit.
Übrigens können Sie ls
durch Angabe von eine Liste von Verzeichnissen ohne Sortierung erhalten -U
.