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.
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).
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.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.