디렉토리를 제외한 파일 수 인쇄 [중복]

디렉토리를 제외한 파일 수 인쇄 [중복]

나는 | wc -l' 명령이 현재 디렉토리에 있는 파일 수를 인쇄하지만 여기에는 모든 파일과 디렉토리가 포함된다는 것을 배웠습니다. 디렉토리를 제외한 일반 파일만으로 동일한 작업을 수행할 수 있나요?

답변1

목차많은 파일 형식 중 하나일 뿐입니다. 다른 유형은 다음과 같습니다심볼릭 링크,선입선출,장비,정기적인,소켓...

출력에서 ls -n첫 번째 문자는 유형을 나타냅니다. d디렉토리의 -경우정기적인, l을 위한심볼릭 링크, 다음과 같이 할 수 있습니다.

LC_ALL=C ls -Aqn | LC_ALL=C grep  -c '^-' # regular files only
LC_ALL=C ls -Aqn | LC_ALL=C grep -vc '^d' # anything but directory

( -A숨겨진 파일 수를 계산하지 않으려면 이 옵션을 제거하세요.)

검진도 할 수 있어요심볼릭 링크 해결 후,

LC_ALL=C ls -LAqn | LC_ALL=C grep  -c '^-' # regular files or symlinks to regulars
LC_ALL=C ls -LAqn | LC_ALL=C grep -vc '^d' # anything but directory and symlinks to dirs.

zsh셸 의 경우 globbing을 사용하여 이를 수행할 수도 있습니다.

(){print $#} *(NDoN.)  # regular
(){print $#} *(NDoN^/) # non-directories

심볼릭 링크 확인 후( -glob 한정자가 추가됨):

(){print $#} *(NDoN-.)  # regular
(){print $#} *(NDoN-^/) # non-directories

( D숨겨진 파일을 계산하지 않으려면 한정자를 제거하세요).

oN순서에 신경 쓰지 않기 때문에 최적화로 파일 목록 정렬을 비활성화하는 것입니다. GNU 구현에는 옵션이 ls있습니다 -U.

어쨌든 ls | wc -l오류는 파일 이름을 구분하는 데 사용된 개행 수 ls(파일당 하나)를 계산할 뿐만 아니라 파일 이름의 개행 수도 계산하기 때문에 발생합니다(숨겨진 파일도 무시함). 이 -q옵션을 사용하면 파일 이름의 줄 바꿈이 ?.

답변2

나는 보통 다음을 사용합니다:

find . -maxdepth 1 -type f | wc -l

참고:

  • 또한 다음으로 시작하는 파일 이름도 계산합니다..
  • 일반 파일만 보기(fifo, 심볼릭 링크 등은 제외)

답변3

아직 논평할 수는 없지만 이것은 bash 전용 솔루션입니다. 그다지 깔끔하지는 않지만, 사용하지 않으면 더 깔끔한 느낌을 받을 수 있습니다 grep.

. 만 사용했으므로 ls숨겨진 파일이 필요하지 않다고 가정합니다.

i=0
for f in *
do
[[ -f "$f" ]] && let "i++"
done
echo $i

또는 한 줄로 결합하거나i=0; for f in *; do [[ -f "$f" ]] && let "i++"; done; echo $i

관련 정보