Wie kann ich die Anzahl der Ordner in einem Laufwerk unter Linux zählen?

24

Ich muss eine externe Festplatte so organisieren, dass sich nicht mehr als 500 Ordner darauf befinden. Im Bereich "Eigenschaften" von Ubuntu wird nur die Anzahl der Dateien angezeigt, nicht die Anzahl der Ordner.

Gibt es eine einfache Befehlszeile, die die Anzahl der Unterverzeichnisse angibt?

Ich muss rekursiv zählen, und das Laufwerk ist eine externe Festplatte an /media/MUSIC/. Es ist für eine Auto-Stereoanlage, deren Dokumentation besagt, dass nur die ersten 500 Ordner gelesen werden.

Dean Rather
quelle

Antworten:

20

Navigieren Sie zu Ihrem Laufwerk und führen Sie es einfach aus

ls -lR | grep ^d | wc -l
Aniket Thakur
quelle
Dies scheint eine korrektere Zahl zu liefern als die Antwort, die ich vor 3 Jahren angenommen habe. Es zählte das Verzeichnis, in dem ich mich befand, während dies nicht geschah.
Dean Rather
Ich sehe auch verschiedene Zahlen, aber nicht zu unterschiedlich.
SPRBRN
Ich persönlich bevorzuge das grep -cgegenüber dem wc -l. Vielleicht bin es nur ich.
Maxim_united
1
Das Obige wird überzählt, wenn ein Verzeichniseintrag die Sequenz enthält \nd(wobei \ndas NL-Zeichen ist).
Toby Speight
1
Toby hat recht, die lsAusgabe soll nicht weitergeleitet werden . Darüber hinaus wird dies viel langsamer sein, da es den gesamten Baum ausgeben muss und dann grep durch ihn laufen muss
phuclv
37

Alle Ordner insgesamt suchen, einschließlich Unterverzeichnisse?

find /mount/point -type d | wc -l

... oder alle Ordner im Stammverzeichnis suchen (ohne Unterverzeichnisse)?

find /mount/point -maxdepth 1 -type d | wc -l
Quacksalber
quelle
Das erste ist genau das, wonach ich suche. Vielen Dank!
Dean Rather
@Dean: Ja, ich habe es auch schon zum Zählen von Verzeichnissen in meiner Musiksammlung verwendet. :) Zählen Sie Ihre MP3s, um sich über die Rechte zu freuen: find / mount / point -type f | grep -i mp3 | wc -l
quack quixote
1
@Dean: Ja, ich weiß nicht , die find Syntax offhand, aber ich würde in der Regel verwenden grep -v für diesen: find / mount / pt -type f | grep -vi mp3 | grep -vi wav | wc -l ... (und <i> </ i> funktioniert nicht in Kommentaren, verwenden Sie *foo*zur Kursivschrift: foo )
Quacksalber 9.
2
@ Dean: Ich denke, Sie würden nur verwenden find /path -not -iname '*.mp3' | wc -l, um MP3s zu filtern, oder um sowohl MP3s als auch WAVs zu verwendenfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
quack quixote
1
Musste den -type f hinzufügen , damit er auch Ordner ignoriert, aber herzlichen Glückwunsch! Ich habe gerade eine ganze Reihe von M4A-Dateien gefunden, von denen ich keine Ahnung hatte ... Danke!
Dean Rather
4

Neue Zeilen sind gültige Zeichen in Verzeichnisnamen. Ich empfehle find, für jedes gefundene Verzeichnis eine leere Zeile auszudrucken und dann wcdiese Zeilen zählen zu lassen.

find /mount/point -type d -printf '\n' | wc -l
Erik Sjölund
quelle
3

Versuchen Sie Folgendes [siehe unten]:

ls -1 -p | grep "/" | wc -l

Dadurch wird eine einspaltige Liste des aktuellen Verzeichnisses mit abschließenden Schrägstrichen für Elemente gedruckt, die Unterverzeichnisse sind. Anschließend werden die Zeilen mit den Schrägstrichen gezählt.

BEARBEITEN: Sie sollten wahrscheinlich mit der Antwort von quack quixote gehen, da sie etwas expliziter ist, aber ich habe meine korrigiert (nachdem ich die Vorschläge von quack berücksichtigt habe).

ls -Rp | grep "/$" | wc -l
Stuntmouse
quelle
Sie müssen -R hinzufügen, um rekursiv zu werden (Entschuldigung, dass Sie dies nicht erwähnt haben), und den Pfad zu ls angeben, aber ja, das funktioniert: ls -1 -p -R / media / MUSIC / | grep "/" | wc -l Danke!
Dean Rather
Nachdem ich dies und den Vorschlag von quack quixote ausprobiert habe, habe ich zwei unterschiedliche Ergebnisse erhalten ... Ich bin geneigt, dem anderen zu glauben. Danke trotzdem!
Dean Rather
1
Sie brauchen das nicht, -1da ls die Pipe erkennt und Spalten nicht formatiert. Sie können auch mit rekursiven Auflistungen greifen -R, aber dann möchten Sie wahrscheinlich "/$"nur nach abschließenden Schrägstrichen suchen (oder die Zählung wird ausgeschaltet sein). Endfassung:ls -Rp | grep "/$" | wc -l
Quacksalber 9.
1
die find Version i geschrieben werden , zählen .(dh /mount/point) in seiner Zählung, die ls - Version in meinem obigen Kommentar nicht. Diese Zählungen unterscheiden sich um 1, was Sie mit /mount/point/*dem Befehl find korrigieren können (vorausgesetzt, Sie haben keine versteckten Punktverzeichnisse).
Quack Quijote
Ich bin mir nicht sicher, warum Sie die beiden unterschiedlichen Ergebnisse erhalten haben, aber die Methode von @ quack wird "versteckte" Verzeichnisse enthalten (dh solche, die mit '.' beginnen).
Stuntmouse
1

Ich habe ffcnt geschrieben , um die rekursive Dateizählung unter bestimmten Umständen zu beschleunigen: Rotationsdisketten und Dateisysteme, die Extent-Mapping unterstützen.

Es kann eine Größenordnung schneller als lsoder findbasierend auf Ansätzen sein

the8472
quelle
1

Wenn es eine große Anzahl von Verzeichnissen gibt, treekann es eine Ewigkeit dauern , bis Tools fertig sind oder sogar hängen, sodass Sie möglicherweise etwas Effizienteres verwenden möchten.

Die effizienteste Methode zum Zählen der Verzeichnisse, die ich mir vorstellen kann, ist die folgende, da findnur eines .für jeden gefundenen Ordner anstelle des vollständigen Pfads und Dateinamens gedruckt wird und wcnur die Anzahl der Zeichen durchlaufen werden muss:

find /mount/point -type d -printf '.' |wc -c

So schließen Sie /mount/pointsich von der Berechnung aus und zählen nur die Unterverzeichnisse:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c
David
quelle
1

Ich habe du --inodesnützlich gefunden , bin mir aber nicht sicher, welche Version dues erfordert. Unter Ubuntu 17.10 funktioniert Folgendes:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Kombiniere mit | sort -nr, um absteigend nach der Anzahl der enthaltenen Inodes zu sortieren.

krlmlr
quelle
0

Ich verwende gerne tree, um die Anzahl der Verzeichnisse zu ermitteln

tree -d -R -fi --noreport | wc -l

Oder ich verwende find, um anzuzeigen, dass sich ein Großteil der Ordner mit befindet

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn
Cameron L.
quelle
Oder so etwas wie: Baum | grep -e '^. * directorys'
mindcrime
-2

So finden Sie die Anzahl der Ordner und das Verzeichnis im aktuellen Verzeichnis

Geben Sie den folgenden Befehl in Ihr Terminal ein

echo */ | wc
ASHISH RANJAN
quelle