31개 이상의 파일이 포함된 디렉토리만 인쇄

31개 이상의 파일이 포함된 디렉토리만 인쇄

저는 이 스크립트를 사용하여 디렉터리와 하위 디렉터리의 파일 수를 계산합니다.

for i in $(find . -type d) ; do 
  printf "$i %s\t" ;
  ( find $i -type f | wc -l ) ; 
done

이 스크립트는 잘 작동합니다. 내가 정말로 원하는 것은 31개 이상의 파일이 포함된 디렉토리만 인쇄하는 것입니다.

답변1

노력하다:

find . -type d -exec sh -c '[ $(find "$1" -type f | wc -l) -gt 31 ]' _ {} \; -print

-maxdepth두 번째 항목에는 제한을 사용하는 것이 좋습니다 find. 그렇지 않으면 놀라운 결과가 나올 수도 있습니다. 이 명령은 개행 문자가 포함된 이름에는 작동하지 않습니다.

답변2

줄을 변경하십시오 :

( find $i -type f | wc -l ) ; 

이것으로:

FILES=$( find $i -type f | wc -l ); 

그런 다음 다음과 같이 요청할 수 있습니다.

if [ "$FILES" -gt 31 ] ; then

답변3

다음을 사용해야 합니다 -gt.

for i in $(find . -type d) ; do   
  NUM=$( find $i -type f | wc -l );
  if [[ $NUM -gt 31 ]]; then 
        echo "$i $NUM" ;   
  fi
done

답변4

솔루션 활용의 배열:

x=( * )
((${#x[@]} > 31)) && printf '%s\n' *

관련 정보