평균 하위 디렉터리 수

평균 하위 디렉터리 수

많은 하위 디렉터리가 있는 디렉터리가 있습니다. 각 하위 디렉터리에는 여러 하위 디렉터리(하위 하위 디렉터리라고 함)가 포함되어 있습니다. 이제 최상위 디렉터리의 평균 하위 디렉터리 수를 계산하고 싶습니다.

답변1

이 스크립트는 awk를 사용하여 ls 목록에서 하위 디렉터리를 추출합니다. 각 하위 디렉터리를 입력하고 하위 디렉터리 수를 계산합니다. 최종 평균 계산에는 dc가 사용됩니다. 2 k소수점 이하 두 자리까지 출력하도록 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}")

관련 정보