BusyBox下find命令-size参数筛选结果不符合预期问题咨询
问题根因
find命令的-size参数统计的是目标自身的占用大小:针对目录时,统计的是目录inode存储文件列表的元数据大小,而非目录下所有子文件、子目录的累计总大小。
从你提供的busybox stat输出可以直接验证:两个目录自身的大小均为4096字节(4KB),完全符合-size -10k的筛选条件,因此find的输出符合默认逻辑,并非安卓定制版find的bug,属于对参数统计范围的理解偏差。你使用du -hs统计的是目录递归扫描后的总占用大小,和find -size的统计对象完全不同。
单遍find实现按目录总大小筛选的方案
原生find没有内置递归统计目录总大小的能力,你可以通过-exec内嵌判断逻辑实现单遍执行,无需额外管道拼接:
find /data/s*2/data -maxdepth 1 -mindepth 1 -type d -exec sh -c 'du -sk "$1" | awk "{if(\$1 < 10) exit 0; exit 1}"' _ {} \; -print | sort
逻辑说明:
- 每匹配到一个符合层级要求的目录,就调用
du -sk统计其递归总大小(单位为KB) - 通过awk判断大小是否小于10,符合条件返回0(即
-exec判定为真),就执行后续-print输出该目录 - 全程为find单次遍历执行,符合你的单遍执行要求
如果你的安卓环境内置的du支持-t阈值参数,可以进一步简化命令:
find /data/s*2/data -maxdepth 1 -mindepth 1 -type d -exec du -sk -t -10k {} \; | sort
内容的提问来源于stack exchange,提问作者user1874594
相关产品推荐
相关产品推荐

