A árvore pode ser usada para listar o número de arquivos por nível?

2

Como título, preciso examinar um diretório específico e listar o número de arquivos por nível. O diretório é bem grande, com cerca de 10 a 15 níveis de profundidade. Por exemplo, se eu tiver o seguinte:

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)

Então deve me dizer que o nível 3 tem 13 arquivos e o nível 2 tem 6 arquivos (ou 6 + 13, não importa). Pode Tree realizar isso? Eu tentei misturar as opções, mas parece que não funciona.

    
por goh 14.10.2013 / 11:41

3 respostas

2
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.
    
por 14.10.2013 / 16:26
2
tree | sed 's/ //g;s/'/\|/g;s/-.*//g' | sort | uniq -c | grep \|

Resultados:

     35 |
    186 ||
   1408 |||
    691 ||||

O caractere pipe (|) indica a profundidade.

    
por 14.10.2013 / 21:15
1

duvido que tree consiga fazer isso. No entanto, find pode:

find . -mindepth 3 -maxdepth 3 -type f | wc -l

retornaria o número de arquivos no nível 3.

    
por 14.10.2013 / 12:12