仅打印包含超过 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' *

相关内容