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: ¦
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:
DIR_NAME
con .
um den Befehl im aktuellen Ordner auszuführen.-type f
um Verzeichnisse (und Symlinks) in die Zählung einzubeziehen.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.
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:
--dry-run
又は -n
kurz) ist es wichtig, die Dateien nicht tatsächlich zu übertragen!-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.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).
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 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.