ls
コマンドでリストされるファイルの数を制限する方法はありますか?
私は見た:
ls | head -4
しかし、head
またはtail
を実行するには、ls
の実行が完了するまで待機する必要があり、ディレクトリには、かなりの時間がかかる可能性のある膨大な量のファイルが含まれています。
ls
コマンドを使用せずに制限するhead
コマンドを実行したい。
やってみました
ls -U | head -4
これはソートをスキップするはずです。これがおそらくls
に非常に時間がかかっている理由です。
-U
for GNU ls のように、ls
のバージョンにファイルを並べ替えない方法がある場合は、それを使用してください。オプション、ls
は最初にすべてのファイルを読み取り、次に名前をソートしてから印刷を開始します。
もう1つの可能性は、find
を実行することです。これにより、名前が検出されたときに名前が出力されます。
find . -name . -o -Prune | head
(head
はlinesで機能しているため、ファイル名に改行文字が含まれていないと想定しています)。
おそらく、ls
以外のツールが必要ですか?
たとえば、Randal Schwartzには、 大きなディレクトリでPerl
を使用 に関するブログエントリがあります。これには、ニーズを満たすものを構築するためのヒントが含まれている場合があります。
ブログの投稿で、Randalはls
とfind
のどちらも、印刷する前にすべてのディレクトリエントリを読み取ろうとしますが、提案するPerl
ソリューションはそうではないと説明しています。
(このファイルの複製としてクローズされた質問のように)パフォーマンスが問題ではなく、最初のnファイルをリストしたい場合(ls
の出力の最初のn行ではなく)ファイル名でソートされた非表示でないファイルのリストで、zsh
を使用すると、以下を使用できます。
_ls -ld -- *([1,4])
_
最初の4つのファイルをリストします。 zsh
は、*(oN[1,4])
(ls
alsoそのリストをソートします)。
$ cut -f 1,n filename
最初のn
ファイルをフェッチするタスクを実行します。 n
は、抽出するファイルの数です。したがって、完全なコードは次のようになります。
$ ls|cut -f 1,n file
たぶんlessはあなたのニーズにより適していますか?
ls /usr/bin | less
私にとっては、クラシックHDDを搭載した5年前のラップトップで瞬時に動作しますが、ヘッドも同様に高速です。
less
を途中で終了させることができます q。
1秒の遅延の原因についてのあなたの仮定は間違っていると思いますが、おそらくUnixフレーバーまたはシェル、lessまたはheadコマンドに依存します。
Linuxでは、GNU-lsを使用して、
ls -R /usr | less
出力全体が実行中および実行中に、私のためにすぐに出力を開始します。したがって、開始が少なくなる前に、最終的には終了しません。出力に応じて、1秒またはそれ以上の一定の遅延があるかどうかを確認できます。
1秒の遅延には別の理由があると思います。HDDがスリープ状態になり、ウェイクアップが必要なのでしょうか。
非常に少数のファイルでもこのような遅延はありますか?
ls -lrth | tail
ls -lrth | tail -n 10
ls -lrth | grep *.gz | tail