it-swarm.com.de

Wie beschränke ich die Anzahl der von ls gedruckten Dateien?

Gibt es eine Möglichkeit, die Anzahl der aufgelisteten Dateien in einem Befehl ls zu begrenzen?

Ich habe gesehen:

ls | head -4

aber um head oder tail auszuführen, muss ich warten, bis ls die Ausführung beendet hat, und mit Verzeichnissen mit einer enormen Menge von Dateien, die beträchtliche Zeit in Anspruch nehmen können.

Ich möchte einen ls Befehl ausführen, der begrenzt, ohne diesen head Befehl zu verwenden.

104
AndreDurao

Hast du es versucht

ls -U | head -4

Dies sollte die Sortierung überspringen, weshalb ls wahrscheinlich so lange dauert.

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

125
niko

Wenn Ihre Version von ls die Möglichkeit hat, Dateien nicht zu sortieren, z. B. -U für GNU ls , benutze es. Ohne Option liest ls zuerst alle Dateien, sortiert dann die Namen und beginnt mit dem Drucken.

Eine andere Möglichkeit besteht darin, find auszuführen, das die Namen so druckt, wie sie gefunden werden.

find . -name . -o -Prune | head

(Beachten Sie, dass, da head an Zeilen arbeitet, davon ausgegangen wird, dass Dateinamen keine Zeilenumbrüche enthalten.).

Vielleicht benötigen Sie ein anderes Tool als ls?

Zum Beispiel hat Randal Schwartz einen Blogeintrag über nter Verwendung von Perl in großen Verzeichnissen , der einige Hinweise zum Erstellen von etwas enthalten kann, das Ihren Anforderungen entspricht.

In dem Blog-Beitrag erklärt Randal, dass sowohl ls als auch find versuchen, alle Verzeichniseinträge einzulesen, bevor sie gedruckt werden, während die von ihm vorgeschlagene Perl -Lösung dies nicht tut.

4
AFresh1

Wenn die Leistung nicht das Problem ist (wie in der Frage, die als Duplikat dieser geschlossen wurde) und Sie die ersten n Dateien auflisten möchten (im Gegensatz zu den ersten n Zeilen der Ausgabe von ls) In der Liste der nicht ausgeblendeten Dateien, sortiert nach Dateinamen, mit zsh können Sie Folgendes verwenden:

ls -ld -- *([1,4])

um die ersten 4 Dateien aufzulisten. zsh liest trotzdem den gesamten Inhalt des Verzeichnisses, auch wenn Sie ihm sagen, dass er nicht mit *(oN[1,4]) sortieren soll (beachten Sie, dass lsauch sortiert diese Liste).

3
$ cut -f 1,n filename

übernimmt die Aufgabe, die ersten n -Dateien abzurufen. n ist die Anzahl der Dateien, die Sie extrahieren möchten. Der vollständige Code lautet also:

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

Vielleicht ist weniger besser für Ihre Bedürfnisse geeignet?

 ls /usr/bin | less

Bei mir funktioniert es sofort auf einem 5 Jahre alten Laptop mit klassischer Festplatte, aber der Kopf ist genauso schnell.

Sie können less mit vorzeitig beenden q.

Ich denke, Ihre Annahme über die Quelle der 1s-Verzögerung ist falsch, hängt aber möglicherweise von Ihrem Unix-Geschmack oder Ihrer Shell, weniger oder dem Befehl head ab.

Unter Linux mit GNU-ls,

 ls -R /usr | less 

beginnt für mich sofort mit der Ausgabe, während die gesamte Ausgabe läuft und läuft - also ist sie definitiv nicht fertig, bevor weniger startet. Sie können überprüfen, ob Sie eine konstante Verzögerung von 1s oder mehr haben, abhängig von der Ausgabe oder nicht.

Ich denke, Ihre 1s Verzögerung hat einen anderen Grund, vielleicht geht die Festplatte in den Ruhezustand und muss geweckt werden?

Haben Sie eine solche Verzögerung auch für sehr wenige Dateien?

0
user unknown
ls -lrth | tail

ls -lrth | tail -n 10

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