回答:
やってみました
ls -U | head -4
これはソートをスキップするはずls
です。これがおそらく時間がかかる理由です。
ls -U
は印刷前にディレクトリ全体を必ずしも読み取るとは限りません。strace -e getdents,write ls -U > /dev/null
たとえば、大きなディレクトリで試してください。
のバージョンにGNU lsls
などのファイルをソートしない方法がある場合は、それを使用します。オプションを指定しないと、最初にすべてのファイルが読み取られ、次に名前がソートされてから印刷が開始されます。-U
ls
別の可能性は、実行するfind
ことです。これは、名前を見つけたときに出力します。
find . -name . -o -prune | head
(以降ということに注意してくださいhead
に取り組んでいるライン、それはファイル名が改行文字が含まれていないと仮定し)。
find
(busyboxのか家宝とは対照的に、find
またはGNU ls -U
)、印刷を開始する前に、ディレクトリ全体を読み込むようです。
おそらく、あなたは以外のツールを必要としていますls
か?
たとえば、Randal Schwartzには、大きなディレクトリでの使用perl
に関するブログエントリがあります。このディレクトリには、ニーズを満たす何かを構築するためのヒントが含まれている場合があります。
ブログの投稿で、Randalはその両方ls
を説明しfind
、すべてを印刷する前にすべてのディレクトリエントリを読み取ろうとしますが、perl
彼が提案する解決策はそうではありません。
perl
おそらくreaddir(3)
like ls
またはを使用しfind
ます。readdir(3)
GNU / Linuxの現在のバージョンに少なくとも呼び出し行いgetdents()
大きいとシステムコール数を(実際に一般に、システムの数が行われて呼び出し減少させることによって性能を最適化しないこと)。しかし、あなたの場合、必要なファイルが少ない場合は、代わりにreaddir
BSD getdirentries(3)
またはgetdents(2)
システムコールをバイパスして使用する必要があるようです。
(この問題の複製として閉じられた質問のように)パフォーマンスが問題にならず、ls
非出力のリストに(出力の最初のn行ではなく)最初のnファイルをリストしたい場合ファイル名でソートされた隠しファイルでzsh
、を使用できます:
ls -ld -- *([1,4])
最初の4つのファイルをリストします。zsh
ただし、並べ替えないように指定した場合でも、ディレクトリのコンテンツ全体が読み取られます*(oN[1,4])
(そのリストls
も並べ替えられることに注意してください)。
たぶんあなたのニーズにより適しているのは少ないですか?
ls /usr/bin | less
私にとっては、古典的なHDDを搭載した5歳のラップトップで即座に動作しますが、頭も同様に高速です。
でless
途中で終了することがありますq。
1秒の遅延の原因についてのあなたの仮定は間違っていると思いますが、おそらくあなたのUnixフレーバーまたはシェル、lessまたはheadコマンドに依存します。
Linuxでは、GNU-lsを使用して、
ls -R /usr | less
出力全体が実行中および実行中に、すぐに出力を開始します-したがって、lessが開始する前に、完全に終了しません。出力に応じて、1秒以上の一定の遅延があるかどうかを確認できます。
あなたの1秒の遅延には別の理由があると思います、おそらくHDDはスリープ状態になり、ウェイクアップが必要ですか?
ごく少数のファイルでもこのような遅延がありますか?
ls
結果で実行されます。結果を制限する方法を探していました。
ls -lrth | tail
ls -lrth | tail -n 10
ls -lrth | grep *.gz | tail
ls
、bashでコマンドを使用することです。パイプで連結されたのようなコマンドをgrep
、head
、tail
または他の人が後に実行されているls