Puede hacer arreglos para encontrar todos los archivos, eliminar los nombres de los archivos, dejando una línea que contenga solo el nombre del directorio para cada archivo, y luego contar el número de veces que aparece cada directorio:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
El único problema en esto es si tiene algún nombre de archivo o nombre de directorio que contenga un carácter de nueva línea, lo cual es bastante improbable. Si realmente tiene que preocuparse por las nuevas líneas en los nombres de archivos o directorios, le sugiero que las encuentre y las arregle para que no contengan nuevas líneas (y persuadir silenciosamente a la parte culpable del error de sus formas).
Si está interesado en el recuento de archivos en cada subdirectorio del directorio actual, contando los archivos en cualquier subdirectorio junto con los archivos en el subdirectorio inmediato, adaptaría el sed
comando para imprimir solo el directorio de nivel superior:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
El primer patrón captura el comienzo del nombre, el punto, la barra, el nombre hasta la siguiente barra y la barra, y reemplaza la línea con solo la primera parte, así:
./dir1/dir2/file1
es reemplazado por
./dir1/
El segundo reemplazo captura los archivos directamente en el directorio actual; no tienen una barra al final y se reemplazan por ./
. La ordenación y el recuento funcionan solo con el número de nombres.
./
?