平均子目录数

平均子目录数

我有一个包含许多子目录的目录。每个子目录又包含许多子目录(称为 subsubdirs)。现在我想计算顶级目录中子目录的平均数量。

答案1

该脚本使用 awk 从 ls 列表中提取子目录。输入每个子目录并计算其子目录。最后平均计算使用dc。我已将 dc (使用2 k)设置为输出到小数点后两位。

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"

答案2

/您可以通过在末尾添加 a 将 glob 模式限制为目录。因此*/扩展到当前目录中的目录(不包括名称以点开头的目录)。

因此,假设所涉及的目录没有名称开头的.(如果有,您需要单独计算它们或配置您的 shell 以列出它们):

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

相关内容