當一個人奔跑時
ls | head
head 似乎在列印到螢幕之前等待管道命令的完整輸出。當命令需要很長時間才能運行時,例如當您在包含數百萬個檔案的目錄上執行 ls 時,這是不可取的。
然而,當一個人跑步時
find | head
head 在開始列印到螢幕之前不會等待完整的輸出 - 它看起來是即時的。
我的問題是: find 和 ls 之間的差異是什麼導致了這種行為差異?其次,是否有一個替換指令(對於 ls 或 head)可以讓我立即取得長目錄清單的頭部?
答案1
這不是head
他的錯,而是他的錯。是ls
的。
ls
幾乎總是對其輸出進行排序(預設情況下,按名稱排序;如果需要,則按日期排序)。任何類型的本質都是在讀取整個輸入之前無法產生任何輸出。
find
不會對其輸出進行排序,因此它可以更快地開始生產。
您只需運行即可親眼看到這一點
ls
和
find
並觀察反應時間的差異。
順便說一句,您可以ls
透過指定 來列出目錄而不進行排序-U
。