Vous pourriez vous arranger pour trouver tous les fichiers, supprimer les noms de fichiers, ce qui vous laisserait une ligne contenant uniquement le nom du répertoire de chaque fichier, puis compter le nombre de fois où chaque répertoire apparaît :
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
Le seul problème est que les noms de fichiers ou de répertoires contiennent un caractère de nouvelle ligne, ce qui est assez peu probable. Si vous devez vraiment vous soucier des retours à la ligne dans les noms de fichiers ou de répertoires, je vous suggère de les trouver et de les corriger pour qu'ils ne contiennent plus de retours à la ligne (et de persuader discrètement le coupable de son erreur).
Si vous êtes intéressé par le comptage des fichiers dans chaque sous-répertoire du répertoire courant, en comptant tous les fichiers dans n'importe quel sous-répertoire en même temps que les fichiers dans le sous-répertoire immédiat, alors j'adapterais la commande sed
pour imprimer uniquement le répertoire de premier niveau :
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
Le premier modèle capture le début du nom, le point, la barre oblique, le nom jusqu'à la barre oblique suivante et la barre oblique, et remplace la ligne avec juste la première partie, ainsi :
./dir1/dir2/file1
est remplacé par
./dir1/
Le deuxième remplacement capture les fichiers directement dans le répertoire courant ; ils n'ont pas de slash à la fin, et ceux-là sont remplacés par ./
. Le tri et le comptage ne portent alors que sur le nombre de noms.