디렉터리의 폴더 수(재귀적으로)

디렉터리의 폴더 수(재귀적으로)

CWD/가 지정된 현재 디렉터리의 폴더 수를 인쇄하고 싶습니다(재귀적으로 숨겨진 폴더 제외). 이 정보를 확인하기 위해 어떤 명령 또는 일련의 명령을 사용할 수 있습니까?

답변1

현재 작업 디렉터리에서 숨겨지지 않은 디렉터리의 수를 찾습니다.

ls -l | grep "^d" | wc -l

편집하다:

재귀적으로 만들려면 -R다음 옵션을 사용하십시오 ls -l.

ls -lR | grep "^d" | wc -l

답변2

GNU 영역에서:

find . -mindepth 1 -maxdepth 1 -type d -printf . | wc -c

다른 곳에서

find . -type d ! -name . -printf . -prune | wc -c

배쉬에서:

shopt -s dotglob
count=0
for dir in *; do
  test -d "$dir" || continue
  test . = "$dir" && continue
  test .. = "$dir" && continue
  ((count++))
done
echo $count

답변3

echo $(($(find -type d | wc -l) - 1))단방향입니다(현재 디렉토리를 삭제하려면 wc -l에서 1을 뺍니다). 옵션을 조정할 수 있습니다찾다가서 다른 것을 찾아보세요.

echo $(($(find -type d -not -path '*/\.*' | wc -l) - 1))- 제외숨겨진 디렉토리

댓글에서 언급했듯이 이 표현의 핵심은 실제로 find -type d모든 디렉터리를 찾는다는 것입니다.

이렇게 하면 모든 하위 폴더도 찾을 수 있습니다. -maxdepth플래그를 사용하여 깊이를 제어할 수 있습니다.

답변4

존재하다 zsh:

(){echo $#} *(N/)

재귀적으로:

(){echo $#} **/*(N/)

D숨겨진 디렉터리 수도 계산하려면 glob 한정자를 추가하세요.

POSIX에 해당:

ls -p | grep -c /

(숨겨진 옵션 추가 -A)ls

재귀적으로:

LC_ALL=C find .//. ! -name . \( -name '.*' -prune -o -type d -print \) |
  grep -c //

또는

LC_ALL=C ls -Rqn . | grep -c '^d'

숨겨진 내용:

LC_ALL=C find .//. ! -name . -type d | grep -c //

또는:

LC_ALL=C ls -ARqn . | grep -c '^d'

관련 정보