列印頭在列印之前等待完整的標準輸入

列印頭在列印之前等待完整的標準輸入

當一個人奔跑時

ls | head

head 似乎在列印到螢幕之前等待管道命令的完整輸出。當命令需要很長時間才能運行時,例如當您在包含數百萬個檔案的目錄上執行 ls 時,這是不可取的。

然而,當一個人跑步時

find | head

head 在開始列印到螢幕之前不會等待完整的輸出 - 它看起來是即時的。

我的問題是: find 和 ls 之間的差異是什麼導致了這種行為差異?其次,是否有一個替換指令(對於 ls 或 head)可以讓我立即取得長目錄清單的頭部?

答案1

這不是head他的錯,而是他的錯。是ls的。  ls幾乎總是對其輸出進行排序(預設情況下,按名稱排序;如果需要,則按日期排序)。任何類型的本質都是在讀取整個輸入之前無法產生任何輸出。  find不會對其輸出進行排序,因此它可以更快地開始生產。

您只需運行即可親眼看到這一點

ls

find

並觀察反應時間的差異。

順便說一句,您可以ls透過指定 來列出目錄而不進行排序-U

相關內容