find按大小查文件时单位易错:+表示大于、-表示小于、无符号为等于(慎用);单位m/g指mib/gib而非mb/gb;查≥100mb宜用+99m;加2>/dev/null屏蔽错误,-xdev跳过其他文件系统;排序推荐du -h | sort -hr而非find;删除前务必先-preview。

find 按大小查文件时,单位容易写错
Linux 里 find 查大小,最常踩的坑是单位混淆:-size +100M 表示“大于 100MB”,但很多人误以为是“大于等于”或以为 M 是 MiB(实际是 1024×1024 字节),而 -size 100M 是“正好 100MB”,几乎不可能命中——因为文件大小极少精确到字节级对齐。
-
+表示“大于”,-表示“小于”,不加符号是“等于”(慎用) - 单位:b(512 字节块)、c(字节)、k(KB)、M(MiB)、G(GiB)——注意不是十进制 MB/GB
- 想查“≥100MB”,写
-size +99M更稳妥(避免因四舍五入漏掉 100.1MiB 的文件) - 路径别漏掉,比如从当前目录查:
find . -type f -size +100M
查大文件时卡住或没结果?可能是权限或挂载点干扰
find 默认递归所有子目录,遇到无权限目录(如 /root、/proc)会报错并可能中断或跳过;某些挂载点(如 /sys、/dev)含虚拟文件,大小为 0 或不可读,也会干扰结果。
- 加
2>/dev/null屏蔽错误输出,避免刷屏干扰判断:find /home -type f -size +500M 2>/dev/null - 用
-xdev跳过其他文件系统(防止进入 NFS 或容器挂载点):find / -xdev -type f -size +1G - 先限定范围再扩大,比如先查
/home和/var/log,别一上来扫/
按大小排序并显示路径和大小,用 du + sort 更直观
find 只能过滤,不能直接按大小排序;真正要“找最大的几个”,得结合 du 和 sort。否则光靠 find 输出一堆路径,根本看不出谁最大。
- 查当前目录下前 10 个最大文件:
du -h * 2>/dev/null | sort -hr | head -n 10 - 注意
du -h输出带单位,必须用sort -h(GNU 版本支持),老系统没-h就用du -b | sort -nr | head -
du对软链接默认不展开,加-L可追踪,但小心循环链接导致卡死
误删风险高,查完别直接加 -delete
find ... -delete 看似方便,但一旦路径或条件写错,删的就是真实文件——而且不进回收站,不可逆。
- 永远先用
-print或-ls预览:find /tmp -type f -size +1G -print - 确认无误后,再换
-delete;或者用-exec rm {} \;(更慢但可加-i交互确认) - 生产环境建议先重命名标记:
-exec mv {} {}.TO_DELETE \;,过几小时确认无影响再批量删
事情说清了就结束。真正难的不是命令怎么写,而是你得知道哪个目录该查、哪个挂载点该跳过、以及为什么 du -h | sort -hr 比 find -size 更适合排大小。










