저는 이 스크립트를 사용하여 디렉터리와 하위 디렉터리의 파일 수를 계산합니다.
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' *