Vous pouvez vous arranger pour trouver tous les fichiers, supprimer les noms de fichiers, vous laissant une ligne contenant uniquement le nom de répertoire pour chaque fichier, puis compter le nombre de fois que chaque répertoire apparaît:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
Le seul problème est que vous avez des noms de fichiers ou de répertoires contenant un caractère de nouvelle ligne, ce qui est assez improbable. Si vous avez vraiment à vous soucier des nouvelles lignes dans les noms de fichiers ou de répertoires, je vous suggère de les trouver et de les corriger afin qu'elles ne contiennent pas de nouvelles lignes (et persuader tranquillement le coupable de l'erreur de ses chemins).
Si vous êtes intéressé par le nombre de fichiers dans chaque sous-répertoire du répertoire actuel, en comptant tous les fichiers dans tous les sous-répertoires avec les fichiers dans le sous-répertoire immédiat, alors j'adapterais la sed
commande pour imprimer uniquement le répertoire de niveau supérieur:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
Le premier motif 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 par juste la première partie, donc:
./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 barre oblique à la fin, et ceux-ci sont remplacés par ./
. Le tri et le décompte fonctionnent alors uniquement sur le nombre de noms.
./
?