Linux命令-rmdir(删除空目录)
📅 2026/7/11 12:01:25
👁️ 阅读次数
📝 编程学习
Linux命令-rmdir(删除空目录)
- 命令语法
- 常用选项
- 场景化实例
- 1. 基本使用
- 2. 删除多个空目录
- 3. 递归删除父子空目录
- 4. 批量清理空目录
- 5. 清理用户目录空文件夹
- 6. 非空目录的错误处理
- 7. 与 rm 对比
- 8. 系统维护脚本
- 最佳实践
快速参考:rmdir专门用于删除空目录,只能删除不包含文件和子目录的目录。要删除非空目录需使用rm -r。适合清理文件系统中多余的空目录结构。
提示:
rmdir比rm -r更安全,因为不会误删有内容的目录。配合-p可递归删除路径上所有空目录。
命令语法
rmdir[选项]目录名...常用选项
| 选项 | 说明 |
|---|---|
-p | 递归删除路径上所有空目录 |
-v | 显示删除详情 |
--ignore-fail-on-non-empty | 非空目录不报错 |
场景化实例
1. 基本使用
# 创建并删除空目录mkdir/tmp/test_emptyls-ld/tmp/test_emptyrmdir/tmp/test_emptyls-ld/tmp/test_empty2>&1# ls: cannot access '/tmp/test_empty': No such file or directory2. 删除多个空目录
mkdir/tmp/dir_a /tmp/dir_b /tmp/dir_crmdir-v/tmp/dir_a /tmp/dir_b /tmp/dir_c# rmdir: removing directory, '/tmp/dir_a'# rmdir: removing directory, '/tmp/dir_b'# rmdir: removing directory, '/tmp/dir_c'3. 递归删除父子空目录
# 创建嵌套目录mkdir-p/tmp/deep/nested/path# 注意:只有 path 是新建的空目录# -p 会尝试删除 path -> nested -> deep -> /tmp/deeprmdir-pv/tmp/deep/nested/path# 输出哪些被删除了4. 批量清理空目录
#!/bin/bash# 查找并删除项目中所有空目录echo"扫描空目录中..."empty_count=0find.-typed-empty-print|whilereaddir;doecho"空目录:$dir"((empty_count++))doneread-p"共$empty_count个空目录,确认删除?(y/n) "ansif["$ans"="y"];thenfind.-typed-empty-deleteecho"已删除所有空目录"fi5. 清理用户目录空文件夹
# 清理 home 目录的空文件夹(跳过隐藏目录)find~-maxdepth4-typed-empty!-path"*/.git/*"!-path"*/node_modules/*"2>/dev/null# 实际删除find~-maxdepth4-typed-empty!-path"*/.git/*"-execrmdir{}\;2>/dev/null6. 非空目录的错误处理
# 非空目录会报错mkdir/tmp/has_filestouch/tmp/has_files/data.txtrmdir/tmp/has_files# rmdir: failed to remove '/tmp/has_files': Directory not empty# 忽略非空错误rmdir--ignore-fail-on-non-empty /tmp/has_filesecho"退出码:$?"# 退出码: 0(即使未删除也不报错)# 清理rm-r/tmp/has_files7. 与 rm 对比
# rmdir: 仅空目录,安全mkdirempty&&rmdirempty# rm -d: 等同于 rmdirmkdirempty2&&rm-dempty2# rm -r: 可删除非空目录(危险)mkdir-ptest/sub&&touchtest/sub/file.txtrm-rtest# 删除成功但不安全8. 系统维护脚本
#!/bin/bash# 系统级空目录清理LOG="/var/log/clean_empty_dirs.log"echo"===$(date)开始清理空目录 ===">>"$LOG"# 清理临时目录find/tmp-maxdepth1-typed-empty-mtime+1-execrmdir{}\;2>>"$LOG"# 清理 /var 空目录(跳过关键路径)find/var-typed-empty!-path"/var/run/*"!-path"/var/lock/*"2>/dev/null|\whilereaddir;doecho"发现:$dir">>"$LOG"doneecho"=== 清理完成 ===">>"$LOG"最佳实践
用
find . -type d -empty先扫描再删除;生产环境配合--ignore-fail-on-non-empty安全清理。
# 安全三步法find.-typed-empty>/tmp/empty_dirs.txt# 列出cat/tmp/empty_dirs.txt# 审查xargs-a/tmp/empty_dirs.txtrmdir-v# 删除
编程学习
技术分享
实战经验