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: ¦
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: ¦
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.
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.
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.
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
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:
Sie verfügt über einen Fortschrittsbalken, was praktisch ist, wenn Sie viele Dateien haben:
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 Fertigstellungncdu
ca. 1m20s bis zur Fertigstellung 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.