o로 끝나는 디렉토리의 모든 파일 수를 계산해야 한다고 가정해 보겠습니다. (예: ab12.14o, 70010340.09o) 어떤 명령을 사용해야 합니까?
시도했지만 ls *.o | wc
작동하지 않습니다.
답변1
아마도 glob 표현식에서 를 제거해야 할 것입니다 . 그러면 .
로 끝나는 파일만 일치하게 됩니다..o
o
그러나 더 좋은 방법은 다음을 사용하는 것입니다 find
.
find . -maxdepth 1 -name '*o' -printf 'x' | wc -c
-type f
일반 파일(디렉토리 제외)로 제한하기 위해 추가 하고 -maxdepth 1
재귀적으로 계산하려면 제거할 수 있습니다.
답변2
을 사용하지 마십시오 ls
.
쉘 배열을 사용하여 다음으로 끝나는 파일 이름을 저장합니다 o
.
files=( *o )
이제 다음을 수행하십시오.
echo "${#files[@]}"
파일 수를 얻으려면.
@steeldriver는 일치하는 파일 이름이 없으면 glob 패턴이 문자 그대로 사용된다는 점을 공정하게 지적했습니다. 이로 인해 일치하는 파일 이름이 없더라도 파일 개수는 1로 표시됩니다.
이 문제를 극복하려면 nullglob
또는 failglob
쉘 옵션을 설정하십시오.
shopt -s nullglob
shopt -s failglob