현재 디렉터리의 디렉터리 트리에 있는 모든 파일/디렉터리 수만 나열

현재 디렉터리의 디렉터리 트리에 있는 모든 파일/디렉터리 수만 나열

현재 디렉터리의 각 하위 디렉터리 트리 아래에 있는 디렉터리 수를 나열하고 싶습니다. 디렉터리가 너무 많아서 각 디렉터리에 들어가 확인할 수 없습니다. 아래와 같은 보고서를 생성하고 싶습니다.

여기에 이미지 설명을 입력하세요.

문제는 내 서버가 디렉터리 생성의 최대 한도에 도달했다는 경고를 표시한다는 것입니다. 그래서 상위 디렉터리 중 어느 디렉터리에 하위 디렉터리(파일 제외)가 가장 많은지 알고 싶습니다.

답변1

순수 ksh93 솔루션:

FIGNORE='@(.|..)'
for dir in */; do a=( "$dir"/**/* ); printf "%s\t%s\n" "$dir:" "${#a[*]}"; done

결과 /usr/src:

linux-3.17.7-gentoo/:   561
linux-3.5.7-gentoo/:    517
linux-3.7.10-gentoo/:   505
linux-3.7.9-gentoo/:    513
linux-3.8.13-gentoo/:   551
linux-4.0.5-gentoo/:    1849

답변2

먼저 최상위 디렉터리를 찾은 다음 두 번째 조회를 사용하여 최상위 디렉터리에 있는 파일 및 디렉터리 수를 계산할 수 있습니다.

$ for dir in $(find . -maxdepth 1 ! -path . -type d | sort); \
      do echo -n "$dir " && find $dir ! -path . | wc -l ; done
./adir 1151
./anotherdir 140
./623de41e44 280
./examples 154
...

답변3

이와 같은 것이 귀하의 요구 사항을 충족합니까?

이 경로는 /boot예제 데모에 사용됩니다. 필요한 디렉토리로 변경하십시오.

for DIR in $(find /boot/* -maxdepth 1 -type d)
do
    printf "%40s: %10d\n" "${DIR}" $(find ${DIR}|wc -l)
done

산출:

                          /boot/grub:        282
                    /boot/grub/fonts:          2
                  /boot/grub/i386-pc:        272
                   /boot/grub/locale:          4
                    /boot/lost+found:          1

답변4

아래의 작은 루프는 모든 파일 수를 나열합니다.(심볼릭 링크 제외)해당 하위 디렉터리는 . 하위 디렉터리와 동일한 파일 시스템에 존재합니다.

for d in ./* ./.[!.]* ./..?*
do  ! [ -h "$d" ]  &&
      cd "$d" 2>&3 || continue
      printf "%s:\t" "$d"
      find .//. -xdev -depth ! -type l |
      grep -c '^\.//\.'
      cd ..
done  3>/dev/null

관련 정보