find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Vielen Dank an Gilles und Xenoterracide für die Sicherheits- und Kompatibilitätsverbesserungen.
Der erste Teil: find -maxdepth 1 -type d
Gibt eine Liste aller Verzeichnisse im aktuellen Arbeitsverzeichnis zurück. Dies wird geleitet, um ...
Der zweite Teil: while read -r dir; do
beginnt eine while-Schleife - solange die in die while kommende Pipe offen ist (bis die gesamte Verzeichnisliste gesendet wurde), setzt der Lesebefehl die nächste Zeile in die Variable "dir". Dann geht es weiter ...
Der dritte Teil: printf "%s:\t" "$dir";
gibt die Zeichenfolge in "$ dir" (der einen der Verzeichnisnamen enthält) gefolgt von einem Tabulator aus.
Der vierte Teil: find "$dir -f file"
Erstellt eine Liste aller Dateien innerhalb des Verzeichnisnamens in "$ dir". Diese Liste wird gesendet an ..
Der fünfte Teil: wc -l;
Zählt die Anzahl der Zeilen, die in die Standardeingabe gesendet werden.
Der letzte Teil: done
Beendet einfach die while-Schleife.
So erhalten wir eine Liste aller Verzeichnisse im aktuellen Verzeichnis. Für jedes dieser Verzeichnisse erstellen wir eine Liste aller darin enthaltenen Dateien, damit wir sie alle mit zählen können wc -l
. Das Ergebnis sieht folgendermaßen aus:
./dir1: 234
./dir2: 11
./dir3: 2199
...