Frage Rekursiv alle Dateien in einem Verzeichnis zählen [duplizieren]


Mögliche Duplikate:
Wie kann ich die Anzahl der Ordner in einem Laufwerk mit Linux zählen? 

Ich habe einen wirklich tiefen Verzeichnisbaum auf meiner Linux-Box. Ich möchte alle Dateien in diesem Pfad einschließlich aller Unterverzeichnisse zählen.

Zum Beispiel, angesichts dieser Verzeichnisbaum:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

Wenn ich reinkomme /homeIch möchte dafür vier Dateien zurückgeben. Oder, Bonuspunkte, wenn es vier Dateien und zwei Verzeichnisse zurückgibt. Grundsätzlich möchte ich, dass Sie mit der rechten Maustaste auf einen Ordner unter Windows klicken und Eigenschaften auswählen und sehen, wie viele Dateien / Ordner in diesem Ordner enthalten sind.

Wie kann ich das am einfachsten machen? Ich habe eine Lösung mit einem Python-Skript, das ich geschrieben habe, aber warum ist das nicht so einfach wie das Laufen ls | wc o.ä?


165
2017-10-12 21:41


Ursprung


Nicht genau was du suchst, aber um eine sehr schnelle Gesamtsumme zu bekommen, ob Ihre locate Datenbank ist aktuell: locate /some/path | wc -l (oder auf meinem Mac: locate -c /some/path). Aber: damit werden auch Dateien gezählt /this/other/path/with/some/pathund zählt die Ordner selbst. - Arjan
Dies ist übrigens ein anderes, aber nahestes Problem (Zählen aller Verzeichnisse auf einem Laufwerk) und Lösung: superuser.com/questions/129088/... - Amanda


Antworten:


find . -type f | wc -l

Erläuterung:
find . -type f findet alle Dateien ( -Typ f ) in diesem ( . ) Verzeichnis und in allen Unterverzeichnissen werden die Dateinamen dann auf standard out pro Zeile gedruckt.

Dies wird dann piped | in wc (Wortzählung) die -l option sagt wc, dass nur Zeilen seiner Eingabe gezählt werden sollen.

Zusammen zählen sie alle Ihre Dateien.


289
2017-10-12 21:44





Die Antworten oben beantworten bereits die Frage, aber ich füge hinzu, dass wenn Sie ohne Argumente suchen (außer für den Ordner, in dem die Suche stattfinden soll) wie in:

find . | wc -l

Die Suche geht viel schneller, fast augenblicklich oder zumindest für mich. Dies liegt daran, dass die type-Klausel einen stat () - Systemaufruf für jeden Namen ausführen muss, um den Typ zu überprüfen - dies zu umgehen, wird jedoch vermieden.

Dies hat den Unterschied, dass die Anzahl der Dateien plus Ordner anstatt nur der Dateien zurückgegeben wird, aber für mich reicht es aus, um herauszufinden, welche Ordner riesige Mengen an Dateien haben, die ewig dauern, um sie zu kopieren und zu komprimieren. Das Zählen von Ordnern erlaubt mir immer noch, die Ordner mit den meisten Dateien zu finden. Ich brauche mehr Geschwindigkeit als Präzision.


42
2018-03-28 22:00





Für Dateien:

find -type f | wc -l

Für Verzeichnisse:

find -mindepth 1 -type d | wc -l

Beide arbeiten im aktuellen Arbeitsverzeichnis.


24
2017-10-12 21:56





Mit Bash 4+

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

Sie müssen nicht zweimal suchen, wenn Sie nach Dateien und Verzeichnissen suchen möchten


8
2017-10-13 01:58





Geringfügige Aktualisierung der akzeptierten Antwort, wenn Sie eine Anzahl von Verzeichnissen und dergleichen möchten

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

7
2017-10-13 14:26



Auf ein Mac / BSD: find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn (Hier, tippen Sie %T ist leer für eine normale Datei, ein Sternchen für eine ausführbare Datei oder ein Schrägstrich für einen Ordner; daher %HT wird benötigt, oder ein zusätzlicher Text, um zu vermeiden, dass der Raum nicht gezählt wird, wie > %T.) - Arjan