디렉토리의 파일 수를 계산하는 가장 좋은 방법은 무엇입니까?

디렉토리의 파일 수를 계산하는 가장 좋은 방법은 무엇입니까?

구문 분석된 출력이 ls이상한 문자(공백, ...)로 인해 깨질 수 있으므로 위험한 경우 \n디렉터리의 파일 수를 아는 가장 좋은 방법은 무엇입니까?

find나는 보통 이런 종류의 구문 분석을 피하는 데 의존 하지만, 역시 find mydir | wc -l같은 이유로 중단됩니다.

저는 지금 Solaris에서 작업하고 있지만 다른 unice와 다른 쉘 사이에서 가능한 한 이식 가능한 답변을 찾고 있습니다.

답변1

이 팁은 어떻습니까?

find . -maxdepth 1 -exec echo \; | wc -l

findwc.

답변2

Bash에는 외부 유틸리티나 루프가 없습니다.

shopt -s dotglob
files=(*)
echo "${#files[@]}"

shopt -s dotglobksh에서는 로 바꾸거나 FIGNORE=.?(.)zsh
에서는 로 바꾸 setopt glob_dots거나 shopt호출을 제거하고 files=(*(D)). (또는 도트 파일을 포함하지 않으려면 해당 줄을 제거하면 됩니다.)

도트 파일에 관심이 없다면 이식 가능합니다.

set -- *
echo "$#"

정말로 도트 파일을 포함하고 싶다면:

set -- *
if [ -e "$1" ]; then c=$#; else c=0; fi
set .[!.]*
if [ -e "$1" ]; then c=$((c+$#)); fi
set ..?*
if [ -e "$1" ]; then c=$((c+$#)); fi
echo "$c"

답변3

find . ! -name . -prune -print | grep -c /

80년대 이후 시스템에서는 이식성이 매우 뛰어납니다.

이는 .및 를 제외한 현재 디렉토리의 모든 디렉토리 항목을 계산합니다...

또한 하위 디렉터리의 파일 수도 계산합니다.

find .//. ! -name . | grep -c //

(이것은 Unix V6(1975)에도 이식 가능해야 합니다. 그럴 필요는 없기 때문입니다 -prune.)

답변4

제가 항상 사용했지만 문제가 없었던 가장 간단한 버전은 다음과 같습니다. ls -b1 | wc -l

관련 정보