You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用find命令识别超指定大小的目录?或求简易替代方案

问题解答

为什么find -type d -size +100M不生效?

find的-size参数统计的是目录本身的元数据大小——也就是存储目录条目(文件名、inode指针等)的磁盘空间,而非目录下所有文件和子目录的总占用量。哪怕目录里有几十GB的内容,目录本身的大小通常也只有几KB,所以这条命令几乎找不到符合条件的目录。

能不能用find实现需求?

可以,但需要结合du(专门统计目录总大小的工具)计算目录实际占用空间后再过滤。示例命令:

# 递归查找所有目录,统计总大小并过滤超过100M的目录(字节单位)
find . -type d -exec du -sb {} + | awk '$1 > 104857600'
  • -sb:让du以字节为单位输出目录总大小(100M = 10010241024 = 104857600字节)
  • -exec ... +:让find一次性将多个目录传给du,比-exec ... ;更高效
  • awk:过滤出字节数超过100M的条目

如果需要人类可读的输出,可调整为:

find . -type d -exec du -sh {} + | awk '$1 ~ /^[0-9]+[G]/ || ($1 ~ /^[0-9]+[M]/ && substr($1,1,length($1)-1) > 100)'

这条命令会匹配大小超过100M或≥1G的目录,输出带单位的大小和路径。

识别大目录的最简单方法

直接用du命令即可,无需find,这是最直接高效的方式:

方法1:用--threshold过滤(GNU coreutils 8.21+支持)

# 递归显示所有总大小超过100M的目录(人类可读格式)
du -h --threshold=100M /path/to/target

如果只想显示一级子目录的大小(不深入子目录),加上-d 1参数:

du -d 1 -h --threshold=100M /path/to/target

方法2:兼容旧版本系统的写法

如果你的du不支持--threshold,可以用awk配合:

# 以字节为单位统计并过滤,仅输出目录路径
du -sb /path/to/target/* | awk '$1 > 104857600 {print $2}'
# 或者以人类可读格式输出
du -sh /path/to/target/* | awk '$1 ~ /^[0-9]+[G]/ || ($1 ~ /^[0-9]+[M]/ && substr($1,1,length($1)-1) > 100)'

内容的提问来源于stack exchange,提问作者Gonçalo Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:10:09