나는 | 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