디렉토리의 특정 파일 계산

디렉토리의 특정 파일 계산

o로 끝나는 디렉토리의 모든 파일 수를 계산해야 한다고 가정해 보겠습니다. (예: ab12.14o, 70010340.09o) 어떤 명령을 사용해야 합니까?

시도했지만 ls *.o | wc작동하지 않습니다.

답변1

아마도 glob 표현식에서 를 제거해야 할 것입니다 . 그러면 .로 끝나는 파일만 일치하게 됩니다..oo

그러나 더 좋은 방법은 다음을 사용하는 것입니다 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

관련 정보