2010-10-12 21:41:12 +0000 2010-10-12 21:41:12 +0000
217
217

Rekursiv alle Dateien in einem Verzeichnis zählen

Possible Duplicate: Wie kann ich die Anzahl der Ordner in einem Laufwerk unter Linux zählen?

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

Wenn ich zum Beispiel diesen Verzeichnisbaum gebe:

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

Wenn ich /home eingebe, möchte ich, dass es vier Dateien zurückgibt. Oder es gibt Bonuspunkte, wenn es vier Dateien und zwei Verzeichnisse zurückgibt. Im Grunde genommen möchte ich das Äquivalent zu einem Rechtsklick auf einen Ordner unter Windows haben, Eigenschaften auswählen und sehen, wie viele Dateien/Ordner in diesem Ordner enthalten sind.

Wie kann ich das am einfachsten tun? Ich habe eine Lösung mit einem Python-Skript, das ich geschrieben habe, aber warum ist das nicht so einfach wie ls | wc oder ähnlich auszuführen?

Antworten (5)

364
364
364
2010-10-12 21:44:53 +0000

find . -type f | wc -l

Erläuterung: find . -type f findet alle Dateien ( -Typ f ) in diesem ( . ) Verzeichnis und in allen Unterverzeichnissen, die Dateinamen werden dann so ausgedruckt, daß pro Zeile eine Standardzeile ausgegeben wird.

Dies wird dann über die Pipeline | in wc (Wortzählung) eingefügt, die Option -l weist wc an, nur die Zeilen seiner Eingabe zu zählen.

Zusammen zählen sie alle Ihre Dateien.

49
49
49
2011-03-28 22:00:38 +0000

Die obigen Antworten beantworten die Frage bereits, aber ich füge hinzu, dass die Suche viel schneller, fast augenblicklich, oder zumindest für mich, erfolgt, wenn Sie “Suchen ohne Argumente” verwenden (mit Ausnahme des Ordners, in dem die Suche durchgeführt werden soll), wie in:

find . | wc -l

. Dies liegt daran, dass die type-Klausel einen stat()-Systemaufruf für jeden Namen ausführen muss, um seinen Typ zu prüfen - durch Weglassen wird dies vermieden.

Dies hat den Unterschied, dass die Anzahl der Dateien plus Ordner statt nur der Dateien zurückgegeben wird, aber zumindest für mich ist es ausreichend, da ich dies meistens verwende, um herauszufinden, welche Ordner riesige Mengen an Dateien haben, die ewig zum Kopieren und Komprimieren brauchen. Das Zählen der Ordner erlaubt es mir immer noch, die Ordner mit den meisten Dateien zu finden, ich brauche mehr Geschwindigkeit als Präzision.

26
26
26
2010-10-12 21:56:03 +0000

Für Dateien:

find -type f | wc -l

Für Verzeichnisse:

find -mindepth 1 -type d | wc -l

Sie arbeiten beide im aktuellen Arbeitsverzeichnis.

8
8
8
2010-10-13 01:58:12 +0000

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"

Wenn Sie nach Dateien und Verzeichnissen suchen wollen, müssen Sie nicht zweimal Find aufrufen

8
8
8
2010-10-13 14:26:17 +0000

Geringfügige Aktualisierung der akzeptierten Antwort, wenn Sie eine Zählung von Dirnen und dergleichen wünschen

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