"출력이 파이프로 들어감" 오버플로를 해결하는 방법은 무엇입니까? 비동기 파이프가 존재합니까? 내 명령: "ls -l *.htm | wc -l"이 실패합니다.

"출력이 파이프로 들어감" 오버플로를 해결하는 방법은 무엇입니까? 비동기 파이프가 존재합니까? 내 명령: "ls -l *.htm | wc -l"이 실패합니다.

내 디렉토리는 많은 파일로 가득 차 있습니다. 어떤 종류인지, 왜 그렇게 많은지 궁금합니다.

몇 가지 명령을 시도하면 다음과 같은 일이 발생합니다.

ls -l | wc -l
1514340

ls | head -n 4
2004112700001.htm
2004112700002.htm
2004112700003.htm
2004112700004.htm

ls *.xml | head -n 4
20041127.xml
20041225.xml
20050101.xml
20050108.xml

ls -l *.htm | wc -l
bash: /bin/ls: Liste d'arguments trop longue
0

# Any other kind of ls command with *.htm, *.* is failing too.

분석을 시작하려면 wc -l출력이 완전히 완료될 때까지 기다려야 한다는 것을 알고 있습니다 . ls -l *.htm출력이 너무 커서 실패했습니다.

진짜야?

이 경우 ls명령을 와 함께 작동시키는 좋은 방법은 무엇입니까 wc -l? wc출력이 완전히 완료되기 전에 명령이 비동기적으로 시작되도록 요구하는 방법이 있습니까 ?

답변1

rm *을 사용하여 디렉터리에 있는 수백만 개의 파일을 삭제하려고 하면 동일한 문제가 발생합니다. 나는 시스템이 찾은 모든 파일 이름으로 명령을 "확장"하고 있다고 생각하는데... 그럴 여유가 없습니다.

대신 "찾기"를 사용하는 것이 좋습니다.

find . -mindepth 1 -maxdepth 1 -name "*.html" | wc -l

관련 정보