find 命令无法直接查找空目录,因目录大小恒不为 0;但可查真正空的普通文件:find /path -type f -size 0c,其中 -type f 限定普通文件,-size 0c 精确匹配 0 字节。

Linux 中 find 命令本身不能直接“查找空目录”,因为目录在文件系统中只要存在,其大小(st_size)通常显示为 4096(或其它块大小),**不为 0** —— 即使它是空的。所以“大小等于零的空目录”这个说法在技术上不成立。但你可以分别查找:
查找所有大小为 0 的普通文件(真正的空文件)
使用 -size 0c(c 表示字节)匹配长度恰好为 0 字节的常规文件:
find /path -type f -size 0c
说明:
-
-type f确保只查普通文件,排除目录、设备文件、符号链接等 -
-size 0c是精确匹配 0 字节;不要写成-size 0(默认单位是 512 字节块,-size 0会匹配大小 - 常用起点:
/(全系统,需 root 权限)、$HOME(当前用户家目录)
查找真正空的目录(内容为空,即不含任何子项)
用 -empty 配合 -type d:
find /path -type d -empty
说明:
-
-empty对目录表示“不包含任何条目(即无文件、无子目录)”,这是判断“空目录”的标准方式 - 该选项要求 GNU findutils ≥ 4.2.3(现代发行版均满足)
- 注意:它不会匹配权限不足而无法读取的目录(
find跳过不可访问目录)
同时查找空文件和空目录(分两步合并结果)
由于两者条件不同,不能用单个谓词统一表达,但可用 -o(OR)组合:
find /path \( -type f -size 0c \) -o \( -type d -empty \)
说明:
- 括号需转义
\( ... \)或用 quotes,避免 shell 解析错误 - 逻辑清晰:左边找空文件,右边找空目录
- 若想排除某些路径(如
/proc),加-prune或-path过滤
额外提醒:避免误操作
这些命令只查找,不删除。如需清理,务必先验证结果再加 -delete(慎用!):
find /tmp \( -type f -size 0c \) -o \( -type d -empty \) -delete
-
-delete隐含-depth,对目录会先删内容再删目录自身 - 强烈建议先不加
-delete,确认输出无误后再执行 - 重要路径(如
/etc、/var)勿随意扫描或清理

















