![디렉토리의 파일 수를 계산하는 가장 좋은 방법은 무엇입니까?](https://linux55.com/image/19868/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EC%9D%98%20%ED%8C%8C%EC%9D%BC%20%EC%88%98%EB%A5%BC%20%EA%B3%84%EC%82%B0%ED%95%98%EB%8A%94%20%EA%B0%80%EC%9E%A5%20%EC%A2%8B%EC%9D%80%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
구문 분석된 출력이 ls
이상한 문자(공백, ...)로 인해 깨질 수 있으므로 위험한 경우 \n
디렉터리의 파일 수를 아는 가장 좋은 방법은 무엇입니까?
find
나는 보통 이런 종류의 구문 분석을 피하는 데 의존 하지만, 역시 find mydir | wc -l
같은 이유로 중단됩니다.
저는 지금 Solaris에서 작업하고 있지만 다른 unice와 다른 쉘 사이에서 가능한 한 이식 가능한 답변을 찾고 있습니다.
답변1
이 팁은 어떻습니까?
find . -maxdepth 1 -exec echo \; | wc -l
find
및 wc
.
답변2
Bash에는 외부 유틸리티나 루프가 없습니다.
shopt -s dotglob
files=(*)
echo "${#files[@]}"
shopt -s dotglob
ksh에서는 로 바꾸거나 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