"ls | wc -l"의 결과가 실제 파일 수와 일치하지 않습니다.

"ls | wc -l"의 결과가 실제 파일 수와 일치하지 않습니다.

폴더 아래의 파일 수를 계산하고 다음 명령을 사용해야 합니다.

cd testfolder
bash-4.1$ ls | wc -l
6

실제로 이 폴더에는 5개의 파일만 있습니다.

bash-4.1$ ls
total 44
-rw-r--r-- 1 comp 11595 Sep  4 22:51 30.xls.txt
-rw-r--r-- 1 comp 14492 Sep  4 22:51 A.pdf.txt
-rw-r--r-- 1 comp  8160 Sep  4 22:51 comparison.docx.txt
-rw-r--r-- 1 comp   903 Sep  4 22:51 Survey.pdf.txt
-rw-r--r-- 1 comp  1206 Sep  4 22:51 Steam Table.xls.txt

심지어 파일 ls | wc -l로 간주되는 것 같은데 이는 잘못된 것입니다.total 44

답변1

위의 내용에 대한 추가 정보는 다음과 같습니다.

출력을 처리하려면 find결과를 다른 애플리케이션으로 파이핑하는 데 더 적합한 일부 퓨처가 있는 대신 사용해야 합니다.ls-print0

위의 경우에는 이렇게 사용하면 됩니다.

find . -type f | wc -l

여기에는 모든 항목이 나열됩니다.문서현재 디렉토리에.

답변2

이 경우를 포함하여 wc -l명령 출력의 행 수가 반환되기 때문에 작동하지 않습니다 . 쉘에 별칭이 있으므로 출력 을 엉망으로 만드는 추가 정보를 얻게 됩니다.lstotal 44lsls -cml

대신 명령을 사용하십시오 "ls" -Aq | wc -l. -A 명령은 도트 파일을 포함하여 디렉터리의 모든 파일을 나열하지만 .및 제외합니다 ... 여기서 참조는 중요합니다. 별칭을 무시하고 /bin/ls직접 실행됩니다.

-q파일 이름에 개행 문자가 포함되어 있더라도 파일 이름이 한 줄에만 인쇄되도록 합니다(그러면 렌더링됨 ?).

답변3

wc파일 카운터가 아닌 문자, 단어 및 줄 카운터입니다.

원하는 결과를 계산하고 이에 따라 계산을 조정하는 것은 프로그래머/스크립터로서의 책임입니다.

귀하의 경우에는 다음과 같이 할 수 있습니다.

echo $((`ls|wc -l`-1))

마지막으로 ls인수 없이는 정상적이지 않은 매우 긴 목록을 제공하므로 별칭을 지정할 수 있습니다 ls. 따라서 혼란을 피하기 위해 ls(일반적으로) 전체 경로를 참조하는 것이 좋습니다 ./bin/ls

답변4

bash-4.1$ ls
1. total 44
2. -rw-r--r-- 1 comp 11595 Sep  4 22:51 30.xls.txt
3. -rw-r--r-- 1 comp 14492 Sep  4 22:51 A.pdf.txt
4. -rw-r--r-- 1 comp  8160 Sep  4 22:51 comparison.docx.txt
5. -rw-r--r-- 1 comp   903 Sep  4 22:51 Survey.pdf.txt
6. -rw-r--r-- 1 comp  1206 Sep  4 22:51 Steam Table.xls.txt

예, 출력에는 6줄이 있습니다. 다음 을 사용할 수 있습니다. ls -1단일 열 형식에 해당하며 다음과 같습니다.

ls -1
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos

이제 wc -l올바른 수의 파일을 반환합니다.

ls -1 | wc -l
8

관련 정보