1097 Stimmen

Rekursives Zählen von Dateien in einem Linux-Verzeichnis

Wie kann ich Dateien in einem Linux-Verzeichnis rekursiv zählen?

Ich habe dies gefunden:

find DIR_NAME -type f ¦ wc -l

Wenn ich dies jedoch ausführe, wird folgende Fehlermeldung angezeigt.

find: Pfade müssen vor dem Ausdruck stehen: ¦

56voto

hek2mgl Punkte 142036

Da Dateinamen in UNIX Zeilenumbrüche enthalten können (ja, Zeilenumbrüche), wc -l könnte zu viele Dateien zählen. Ich würde für jede Datei einen Punkt drucken und dann die Punkte zählen:

find DIR_NAME -type f -printf "." | wc -c

Anmerkung: Die -printf Option funktioniert nur mit find von GNU findutils. Möglicherweise müssen Sie es installieren, zum Beispiel auf einem Mac.

24voto

Sebastian Meine Punkte 11044

Kombiniert man mehrere der hier gegebenen Antworten, so scheint die sinnvollste Lösung zu sein:

find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n

Es kann seltsame Dinge wie Dateinamen, die Leerzeichen, Klammern und sogar neue Zeilen enthalten, verarbeiten. Es sortiert die Ausgabe auch nach der Anzahl der Dateien.

Sie können die Zahl erhöhen, nachdem -maxdepth um auch die Unterverzeichnisse zu berücksichtigen. Bedenken Sie, dass dies unter Umständen sehr lange dauern kann, insbesondere wenn Sie eine stark verschachtelte Verzeichnisstruktur in Kombination mit einem hohen -maxdepth Nummer.

18voto

Santrix Punkte 845

Wenn Sie wissen wollen, wie viele Dateien und Unterverzeichnisse im aktuellen Arbeitsverzeichnis existieren, können Sie diesen Einzeiler verwenden

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n

Das funktioniert auch unter GNU, und für BSD-Linux (z.B. OSX) lassen Sie einfach das -e aus dem echo-Befehl weg.

17voto

LeOn - Han Li Punkte 8102

Wenn es darum geht, eine bestimmter Dateityp rekursiv können Sie tun:

find YOUR_PATH -name '*.html' -type f | wc -l 

-l dient nur dazu, die Anzahl der Zeilen in der Ausgabe anzuzeigen.

Wenn Sie bestimmte Ordner ausschließen müssen, verwenden Sie -not -path

find . -not -path './node_modules/*' -name '*.js' -type f | wc -l

16voto

Franck Dernoncourt Punkte 68647

Sie können den Befehl ncdu . Es wird rekursiv gezählt, wie viele Dateien ein Linux-Verzeichnis enthält. Hier ist ein Beispiel für die Ausgabe:

enter image description here

Sie verfügt über einen Fortschrittsbalken, was praktisch ist, wenn Sie viele Dateien haben:

enter image description here

Um es unter Ubuntu zu installieren:

sudo apt-get install -y ncdu

Benchmark: Ich habe https://archive.org/details/cv_corpus_v1.tar (380390 Dateien, 11 GB) als den Ordner, in dem man die Anzahl der Dateien zählen muss.

  • find . -type f | wc -l ca. 1m20s bis zur Fertigstellung
  • ncdu ca. 1m20s bis zur Fertigstellung

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X