ls
펑키 한 문자 (공백 \n
,, …)를 깨뜨릴 수 있기 때문에 출력을 구문 분석하는 것이 위험한 경우 디렉토리의 파일 수를 아는 가장 좋은 방법은 무엇입니까?
나는 보통 find
이 파싱을 피하기 위해 의존 하지만, 마찬가지로 find mydir | wc -l
같은 이유로 깨질 것입니다.
나는 지금 Solaris에서 일하고 있지만 가능한 한 다른 유니스와 다른 쉘에서 이식 가능한 답변을 찾고 있습니다.
답변
이 트릭은 어떻습니까?
find . -maxdepth 1 -exec echo \; | wc -l
휴대용로 find
하고 wc
.
답변
외부 유틸리티없이 루프를 사용하거나 루프를 사용하지 마십시오.
shopt -s dotglob
files=(*)
echo ${#files[@]}
KSH에서 교체 shopt -s dotglob
로 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
답변
find . ! -name . -prune -print | grep -c /
80 년대 이후 시스템에 이식성이 뛰어나야합니다.
모든 디렉토리 항목을 제외한 카운트 그 .
와 ..
현재 디렉토리이다.
서브 디렉토리의 파일도 계산하려면 다음을 수행하십시오.
find .//. ! -name . | grep -c //
(필요하지 않기 때문에 Unix V6 (1975)에도 이식 가능해야 함 -prune
)
답변
시험:
ls -b1A | wc -l
은 -b
인쇄 할 수없는 문자를 가지며 , 및 -A
파일을 제외한 모든 파일을 표시합니다 (파이프의 기본값이지만 명시 적으로 좋습니다)..
..
우리가 더 높은 수준의 스크립팅 언어를 포함하는 한, 파이썬에서 한 줄짜리가 있습니다.
python -c 'import os; print len(os.listdir(os.sep))'
또는 완전한 ‘찾기’가있는 경우 :
python -c 'import os; print len([j for i in os.walk(os.sep) for j in i[1]+i[2]])'
답변
Yoc는 이러한 구성을 사용할 수 있습니다.
I=0; for i in * ; do ((I++)); done ; echo $I
그러나 Argument list too long.
디렉토리에 파일이 너무 많은 경우 와 같이 오류 가 발생할 수 있습니다. 그러나 100 억 개의 파일이있는 디렉토리에서 테스트했으며 잘 작동했습니다.
답변
상대적으로 이식성이 좋은 펄을 고려 했습니까?
다음과 같은 것 :
use File::Find;
$counter = 0;
sub wanted {
-f && ++$counter
}
find(\&wanted, @directories_to_search);
print "$counter\n";
답변
이것을 => -i (노드 번호의 경우) 및 -F ( ‘/’와 함께 디렉토리 이름 추가) 옵션과 함께 ls 사용하십시오 .
ls -ilF | egrep -v '/' | wc -l