web-dev-qa-db-ja.com

lsで出力されるファイルの数を制限するにはどうすればよいですか?

lsコマンドでリストされるファイルの数を制限する方法はありますか?

私は見た:

ls | head -4

しかし、headまたはtailを実行するには、lsの実行が完了するまで待機する必要があり、ディレクトリには、かなりの時間がかかる可能性のある膨大な量のファイルが含まれています。

lsコマンドを使用せずに制限するheadコマンドを実行したい。

104
AndreDurao

やってみました

ls -U | head -4

これはソートをスキップするはずです。これがおそらくlsに非常に時間がかかっている理由です。

https://stackoverflow.com/questions/40193/quick-ls-command

125
niko

-U for GNU ls のように、lsのバージョンにファイルを並べ替えない方法がある場合は、それを使用してください。オプション、lsは最初にすべてのファイルを読み取り、次に名前をソートしてから印刷を開始します。

もう1つの可能性は、findを実行することです。これにより、名前が検出されたときに名前が出力されます。

find . -name . -o -Prune | head

headlinesで機能しているため、ファイル名に改行文字が含まれていないと想定しています)。

おそらく、ls以外のツールが必要ですか?

たとえば、Randal Schwartzには、 大きなディレクトリでPerlを使用 に関するブログエントリがあります。これには、ニーズを満たすものを構築するためのヒントが含まれている場合があります。

ブログの投稿で、Randalはlsfindのどちらも、印刷する前にすべてのディレクトリエントリを読み取ろうとしますが、提案するPerlソリューションはそうではないと説明しています。

4
AFresh1

(このファイルの複製としてクローズされた質問のように)パフォーマンスが問題ではなく、最初のnファイルをリストしたい場合(lsの出力の最初のn行ではなく)ファイル名でソートされた非表示でないファイルのリストで、zshを使用すると、以下を使用できます。

_ls -ld -- *([1,4])
_

最初の4つのファイルをリストします。 zshは、*(oN[1,4])lsalsoそのリストをソートします)。

3
$ cut -f 1,n filename

最初のnファイルをフェッチするタスクを実行します。 nは、抽出するファイルの数です。したがって、完全なコードは次のようになります。

$ ls|cut -f 1,n file
0
Ramandeep Singh

たぶんlessはあなたのニーズにより適していますか?

 ls /usr/bin | less

私にとっては、クラシックHDDを搭載した5年前のラップトップで瞬時に動作しますが、ヘッドも同様に高速です。

lessを途中で終了させることができます q

1秒の遅延の原因についてのあなたの仮定は間違っていると思いますが、おそらくUnixフレーバーまたはシェル、lessまたはheadコマンドに依存します。

Linuxでは、GNU-lsを使用して、

 ls -R /usr | less 

出力全体が実行中および実行中に、私のためにすぐに出力を開始します。したがって、開始が少なくなる前に、最終的には終了しません。出力に応じて、1秒またはそれ以上の一定の遅延があるかどうかを確認できます。

1秒の遅延には別の理由があると思います。HDDがスリープ状態になり、ウェイクアップが必要なのでしょうか。

非常に少数のファイルでもこの​​ような遅延はありますか?

0
user unknown
ls -lrth | tail

ls -lrth | tail -n 10

ls -lrth | grep *.gz | tail
0
Abhishek