Puoi organizzare la ricerca di tutti i file, rimuovere i nomi dei file, lasciandoti una riga contenente solo il nome della directory per ogni file, e quindi contare il numero di volte in cui ogni directory appare:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
L'unico problema è se hai nomi di file o nomi di directory contenenti un carattere di nuova riga, il che è abbastanza improbabile. Se devi davvero preoccuparti delle nuove righe nei nomi dei file o delle directory, ti suggerisco di trovarle e risolverle in modo che non contengano nuove righe (e persuadere silenziosamente il colpevole dell'errore dei loro metodi).
Se sei interessato al conteggio dei file in ciascuna sottodirectory della directory corrente, contando tutti i file in qualsiasi sottodirectory insieme ai file nella sottodirectory immediata, adattare il sed
comando per stampare solo la directory di primo livello:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
Il primo modello cattura l'inizio del nome, il punto, la barra, il nome fino alla barra successiva e alla barra e sostituisce la linea solo con la prima parte, quindi:
./dir1/dir2/file1
è sostituito da
./dir1/
La seconda sostituzione acquisisce i file direttamente nella directory corrente; non hanno una barra alla fine e sono sostituiti da ./
. L'ordinamento e il conteggio funzionano quindi solo sul numero di nomi.
./
?