구문 분석된 출력이 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