Número médio de subdiretórios

2

Eu tenho um diretório que contém vários subdiretórios. Cada um desses subdiretórios contém novamente um número de subdiretórios (chamá-los subsubdirs). Agora, gostaria de contar o número médio de subsubdirs no diretório de nível superior.

    
por MaVe 20.07.2013 / 08:24

2 respostas

3

Este script usa o awk para extrair subdiretórios da lista ls. Cada subdiretório é inserido e seus subdiretórios são contados. Finalmente, o cálculo da média usa dc. Eu configurei dc (usando 2 k ) para a saída para 2 casas decimais.

dirs=$(ls -ld * | awk '$1 ~ /^d.*/ { print $9 }')
ndirs=0
for d in $dirs
do
    cd $d
    current_nsubdirs=$(ls -ld * 2>/dev/null | awk '$1 ~ /^d.*/ { print $9 }' | wc -l)
    nsubdirs=$(($nsubdirs + $current_nsubdirs))
    ndirs=$(($ndirs + 1))
    cd ..
done
echo "Total subdirs $ndirs"
echo "Total subsubdirs $nsubdirs"
avg=$(dc <<< "2 k $nsubdirs $ndirs / p")
echo "Average subsubdirs $avg"
    
por 20.07.2013 / 09:48
2

Você pode restringir um padrão glob a diretórios adicionando um / no final. Assim, */ expande para os diretórios no diretório atual (excluindo aqueles cujo nome começa com um ponto).

Assim, assumindo que nenhum diretório envolvido tenha um nome começando com . (se houver, você precisa contá-los separadamente ou configurar seu shell para listá-los também):

set -- */
number_of_subdirectories=$#
set -- */*/
number_of_subsubdirectories=$#
average_number_of_subsubdirectories_per_directory=$(awk "BEGIN {print $number_of_subsubdirectories / $number_of_subdirectories; exit}")
    
por 21.07.2013 / 01:50