Anzahl der Dateien in Ordnern und Unterordnern suchen?

143

Ich möchte die Gesamtanzahl der Dateien in einem Ordner und all seinen Unterordnern ermitteln.

oben ohne
quelle

Antworten:

224

Kann so etwas sein

find . -type f | wc -l

würde den Trick machen. Versuchen Sie den Befehl aus dem übergeordneten Ordner.

sagarchalisieren
quelle
3
Die Lösung schlägt bei Dateien fehl, deren Namen eine neue Zeile enthalten.
Benutzer unbekannt
2
@user unbekannt:find . -type f -ls | wc -l
vereinbaren Sie den
1
noch schneller:find . -type f -print0 | tr -d -c '\0' | wc -c
vereinbaren
13
@arrange: noch schneller: find . -type f -printf . | wc -c- Ich übernehme den Druck für meine Lösung anstelle meines -exec-Echos.
Benutzer unbekannt
1
Dieser Befehl hat in meinem Fall wie ein Zauber gewirkt und sieht aus wie schwarze Magie
pcko1
27

Verwenden Sie den treeBefehl. Möglicherweise müssen Sie das treePaket installieren .

Es listet alle Dateien und Ordner unter dem angegebenen Ordner auf und listet am Ende eine Zusammenfassung auf.

Egil
quelle
14

Verwenden Sie zum Zählen von Dateien (auch Dateien ohne Erweiterung) im Stammverzeichnis des aktuellen Verzeichnisses Folgendes:

ls -l | grep ^- | wc -l

Verwenden Sie zum rekursiven Zählen von Dateien (auch Dateien ohne Erweiterung) aus dem Stammverzeichnis des aktuellen Verzeichnisses Folgendes:

ls -lR | grep ^- | wc -l
user38537
quelle
1
Diese zählen keine versteckten Dateien.
Benutzer unbekannt
Wahr. Ich bin eher geneigt, Ihre Antwort als Lösung zu akzeptieren und zu verwenden.
User38537
13

Der schnellste und einfachste Weg ist die Verwendung tree. Die Geschwindigkeit wird durch Ihr Ausgangsterminal begrenzt. Wenn Sie also das Ergebnis tail -1weiterleiten, erhalten Sie sofort ein Ergebnis. Mit der -LOption können Sie auch steuern, auf welche Verzeichnisebene die Ergebnisse Ihnen gefallen . Verwenden Sie für die farbige Ausgabe -C. Zum Beispiel:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files

Wenn es noch nicht da ist, können Sie es hier bekommen .

not2qubit
quelle
9
find -type f -printf . | wc -c

Zählen Sie nicht die Ausgabezeilen von find, da Dateinamen, die 99 neue Zeilen enthalten, als 100 Dateien gezählt werden.

Benutzer unbekannt
quelle
4
Dateinamen, die neue Zeilen enthalten, sind ein äußerst seltener Randfall.
DisgruntledGoat
8
@ DisgruntledGoat: Also ein Fehler wird extrem schwer zu finden sein.
Benutzer unbekannt
Ich mag einen guten Randfall, besonders viele Jahre später.
User38537
3

Verwenden Sie diesen Befehl für jeden Ordner im Pfad

for D in *; do echo $D; find $D -type f| wc -l; done
Sriram Murali
quelle
1

find ist anscheinend schneller als tree, daher habe ich im Folgenden die Dateien in jedem Verzeichnis des aktuellen Arbeitsverzeichnisses gezählt (wobei Dateien in CWD ignoriert wurden), wobei die Verzeichnisse Leerzeichen enthalten dürfen:

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done

Mike Bounds
quelle
Das Parsen der Ausgabe von lsist eine sehr schlechte Idee.
Souravc
Großer Code, wie kann ich die Ausgangsleitungen sagen in einer zunehmenden oder abnehmenden Anzahl der Dateien ordnen
Nachtkriecher
0

Sie können verwenden find . | wc -l

find .listet alle Dateien und Ordner sowie deren Inhalt auf, beginnend in Ihrem aktuellen Ordner.
wc -lzählt die Ergebnisse von find

David
quelle
Diese Lösung zählt auch die Ordner, ich gab die Note, weil es zu meiner Gelegenheit passte, dass ich sie nicht einzählen wollte :)
topless
Die Lösung schlägt bei Dateien fehl, deren Namen eine neue Zeile enthalten.
Benutzer unbekannt
0

Ich würde mich für diese Option entscheiden:

ls -alR | grep -c ^ -

Charles
quelle
3
Bitte fügen Sie einige Details hinzu ...
Pierre.Vriens