Necesito buscar en un directorio en particular y enumerar la cantidad de archivos por nivel. El directorio es bastante grande, con una profundidad de entre 10 y 15 niveles. Por ejemplo, si tengo lo siguiente:
D1
|
|-- D2A (5 files in this directory)
| |-- D3A (6 files in this directory)
| |-- D3B (7 Files in this directory)
|
|-- D2B (1 file in this directory)
Entonces debería decirme que el nivel 3 tiene 13 archivos y el nivel 2 tiene 6 archivos (o 6+13, no importa). ¿Puede Tree
lograr esto? Intenté mezclar las opciones pero no parece funcionar.
Respuesta1
find . -type d | \
perl -ne 'BEGIN{ sub cnt{ $file=shift; $c="find $file -maxdepth 1 -type f | wc -l";int(`$c`) }} chomp; printf "%s %s\n", $_, cnt($_)' | \
perl -ne '/^(.*) (\d*)$/; $_{scalar(split /\//, $1)}+=$2; END { printf "Depth %d has %d files.\n", @$_ for map { [$_,$_{$_}] } sort keys %_ }'
Resultados:
Depth 1 has 7 files.
Depth 2 has 2353 files.
Depth 3 has 2558 files.
Depth 4 has 8242 files.
Depth 5 has 6452 files.
Depth 6 has 674 files.
Depth 7 has 1112 files.
Depth 8 has 64 files.
Depth 9 has 154 files.
Respuesta2
Dudo que tree
pueda lograr esto. Sin embargo, find
puede:
find . -mindepth 3 -maxdepth 3 -type f | wc -l
devolvería el número de archivos en el nivel 3.
Respuesta3
tree | sed 's/ //g;s/`/\|/g;s/-.*//g' | sort | uniq -c | grep \|
Resultados:
35 |
186 ||
1408 |||
691 ||||
El carácter de barra vertical (|) indica la profundidad.