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 dGibt eine Liste aller Verzeichnisse im aktuellen Arbeitsverzeichnis zurück. Dies wird geleitet, um ...
Der zweite Teil: while read -r dir; dobeginnt 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: doneBeendet 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
...