Anzahl der Dateien in Ordnern und Unterordnern suchen?


143

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

Antworten:


224

Kann so etwas sein

find . -type f | wc -l

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


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.


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

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 .


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.


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

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


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


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 ^ -


3
Bitte fügen Sie einige Details hinzu ...
Pierre.Vriens
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.