ヘッドは印刷前に標準入力がいっぱいになるまで待機します

ヘッドは印刷前に標準入力がいっぱいになるまで待機します

走るとき

ls | head

head は、パイプされたコマンドの完全な出力が画面に出力されるまで待機しているようです。これは、数百万のファイルを含むディレクトリで ls を実行している場合など、コマンドの実行に非常に長い時間がかかる場合には望ましくありません。

しかし、走ると

find | head

head は、画面への印刷を開始する前に完全な出力を待機しません。画面への印刷は、リアルタイムで実行されます。

私の質問はこれです: find と ls の違いが、この動作の違いを引き起こしているのでしょうか? 次に、長いディレクトリ リストの先頭を即座に取得できる代替コマンド (ls または head のいずれか) はありますか?

答え1

headこれはのせいではなく、lsのせいです。  lsは、ほとんどの場合、出力をソートします (デフォルトでは名前順、要求された場合は日付順)。 また、入力全体を読み込むまで出力を生成できないのは、あらゆるソートの性質です。  findは出力をソートしないので、より早く生成を開始できます。

走ってみれば、これがわかるはずだ

ls

そして

find

応答時間の違いを観察します。

ちなみに、lsを指定すると、ソートせずにディレクトリを一覧表示できます-U

関連情報