平均サブディレクトリの数

平均サブディレクトリの数

多くのサブディレクトリがあるディレクトリがあります。各サブディレクトリには、複数のサブディレクトリ(サブサブディレクトリと呼ばれる)が含まれています。ここで、最上位ディレクトリの平均サブディレクトリ数を計算したいと思います。

答え1

このスクリプトは awk を使用して ls リストからサブディレクトリを抽出します。各サブディレクトリを入力し、サブディレクトリの数を数えます。最終平均計算にはDCが使用されます。2 k小数点以下2桁まで出力するようにdc(使用)を設定しました。

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

/末尾に を追加すると、glob パターンをディレクトリに制限できます。したがって、*/現在のディレクトリ内のディレクトリに展開されます(名前がドットで始まるディレクトリを除く)。

したがって、問題のディレクトリに次に始まる名前がないと仮定します.(存在する場合は別々に計算するか、リストを一覧表示するようにシェルを構成する必要があります)。

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

関連情報