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: ¦

1861voto

paulsm4 Punkte 106654

Das sollte funktionieren:

find DIR_NAME -type f | wc -l

Erläuterung:

  • -type f um nur Dateien einzuschließen.
  • | ( und nicht ¦ ) leitet um find die Standardausgabe des Befehls in wc der Standardeingabe des Befehls.
  • wc (kurz für word count) zählt Zeilenumbrüche, Wörter und Bytes auf seiner Eingabe ( docs ).
  • -l um nur Zeilenumbrüche zu zählen.

Notas:

  • Ersetzen Sie DIR_NAME con . um den Befehl im aktuellen Ordner auszuführen.
  • Sie können auch die -type f um Verzeichnisse (und Symlinks) in die Zählung einzubeziehen.
  • Es ist möglich, dass dieser Befehl zu viel zählt, wenn Dateinamen Zeilenumbruchzeichen enthalten können.

Erläuterung, warum Ihr Beispiel nicht funktioniert:

In dem von Ihnen gezeigten Befehl verwenden Sie nicht die "Pipe" ( | ), um zwei Befehle irgendwie miteinander zu verbinden, aber der unterbrochene Balken ( ¦ ), die die Shell nicht als Befehl oder ähnliches erkennt. Deshalb erhalten Sie diese Fehlermeldung.

141voto

Abhishek Maurya Punkte 1597

Für das aktuelle Verzeichnis:

find -type f | wc -l

108voto

Greg Bell Punkte 1741

Wenn Sie eine Aufschlüsselung der Anzahl der Dateien in den einzelnen Verzeichnissen unter Ihrem aktuellen Verzeichnis wünschen:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

Das kann natürlich alles in einer Zeile geschehen. Die Klammern verdeutlichen, wessen Ausgabe wc -l beobachtet werden soll ( find $i -type f in diesem Fall).

104voto

psmith Punkte 2072

Auf meinem Computer, rsync ist ein wenig schneller als find | wc -l in der akzeptierten Antwort:

$ rsync --stats --dry-run -ax /path/to/dir /tmp

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

In der zweiten Zeile steht die Anzahl der Dateien, im obigen Beispiel 150.481. Als Bonus erhalten Sie auch die Gesamtgröße (in Bytes).

Bemerkung:

  • Die erste Zeile ist eine Zählung aller Dateien, Verzeichnisse, Symlinks usw., deshalb ist sie größer als die zweite Zeile.
  • die --dry-run 又は -n kurz) ist es wichtig, die Dateien nicht tatsächlich zu übertragen!
  • Ich habe die -x Option "Dateisystemgrenzen nicht überschreiten", d.h. wenn Sie es für / und Sie externe Festplatten angeschlossen haben, werden nur die Dateien auf der Root-Partition gezählt.

67voto

lev Punkte 2467

Sie können verwenden

$ tree

nach der Installation der Baum Paket mit

$ sudo apt-get install tree

(auf einem Debian / Mint / Ubuntu Linux Rechner).

Der Befehl zeigt nicht nur die Anzahl der Dateien, sondern auch die Anzahl der Verzeichnisse getrennt an. Mit der Option -L kann die maximale Anzeigeebene angegeben werden (die standardmäßig der maximalen Tiefe des Verzeichnisbaums entspricht).

Versteckte Dateien können ebenfalls einbezogen werden, indem man die -a Option .

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