답변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