Administrator
发布于 2026-04-07 / 4 阅读
0

rmdir删除空目录

rmdir删除空目录

常用:无参
进阶:

  1. -p删除多级空目录

tm@server1:~$ mkdir -pv a/b/c
mkdir: created directory 'a'
mkdir: created directory 'a/b'
mkdir: created directory 'a/b/c'
tm@server1:~$ rmdir -pv a/b/c
rmdir: removing directory, 'a/b/c'
rmdir: removing directory, 'a/b'
rmdir: removing directory, 'a'
  1. -v显示删除过程

tm@server1:~$ mkdir -pv a/b/c
mkdir: created directory 'a'
mkdir: created directory 'a/b'
mkdir: created directory 'a/b/c'
tm@server1:~$ rmdir -pv a/b/c
rmdir: removing directory, 'a/b/c'
rmdir: removing directory, 'a/b'
rmdir: removing directory, 'a'
  1. --ignore-fail-on-non-empty忽略空目录报错,默认跳过

tm@server1:~$ mkdir -pv a/b/c
mkdir: created directory 'a'
mkdir: created directory 'a/b'
mkdir: created directory 'a/b/c'
tm@server1:~$ touch a/test.txt
tm@server1:~$ tree a
a
├── b
│   └── c
└── test.txt
tm@server1:~$ rmdir --ignore-fail-on-non-empty -pv a/b/c
rmdir: removing directory, 'a/b/c'
rmdir: removing directory, 'a/b'
rmdir: removing directory, 'a'
tm@server1:~$ ls
a
tm@server1:~$ tree a
a
└── test.txt

1 directory, 1 file
tm@server1:~$
  1. find . -type d -empty -exec rmdir {} \;

tm@server1:~$ mkdir -pv a/b/c
mkdir: created directory 'a'
mkdir: created directory 'a/b'
mkdir: created directory 'a/b/c'
tm@server1:~$ touch a/test.txt
tm@server1:~$ tree a
a
├── b
│   └── c
└── test.txt

3 directories, 1 file
tm@server1:~$ find . -type d -empty -exec rmdir {} \;
find: ‘./a/b/c’: No such file or directory
tm@server1:~$ tree a
a
├── b
└── test.txt

2 directories, 1 file
tm@server1:~$

find查找,find .从当前目录开始查找,-tpye d只查找目录(d代表directory),-empty只查找空目录,-exec rmdir {} \;对每个找到的目录执行 rmdir 命令。
{} 会被替换成当前找到的目录路径,\; 是命令结束符。
5. rmdir 只能删除空目录,非空要用 rm -r
6. rmdir 的退出状态码:成功返回 0,失败(目录非空或不存在)返回 1。可以在脚本里判断。

案例:

  1. 删除单级目录

tm@server1:~$ mkdir test
tm@server1:~$ ls
test
tm@server1:~$ rmdir test
tm@server1:~$ ls
tm@server1:~$
  1. 删除多级目录

tm@server1:~$ mkdir -vp a/b/c
mkdir: created directory 'a'
mkdir: created directory 'a/b'
mkdir: created directory 'a/b/c'
tm@server1:~$ ls
a
tm@server1:~$ rmdir -vp a/b/c
rmdir: removing directory, 'a/b/c'
rmdir: removing directory, 'a/b'
rmdir: removing directory, 'a'
tm@server1:~$ ls
tm@server1:~$
  1. 删除指定目录

tm@server1:~$ mkdir -p project/{src,logs,docs}
tm@server1:~$ tree project/
project/
├── docs
├── logs
└── src

4 directories, 0 files
tm@server1:~$ rmdir project/src
tm@server1:~$ tree project/
project/
├── docs
└── logs

3 directories, 0 files
tm@server1:~$
  1. 批量删除当前目录下的空目录,用find一键清理

tm@server1:~$ tree project/
project/
├── docs
└── logs

3 directories, 0 files
tm@server1:~$ find . -type d -empty -delete
tm@server1:~$ ls
tm@server1:~$

-delete 是 -exec rmdir {} \; 的简洁版,不会报错)
5. 在脚本中安全的删除目录

[ -d "logs" ] && [ -z "$(ls -A logs)" ] && rmdir logs

 -d 用于测试路径是否为一个目录,ls -A 列出除 . 和 .. 外的所有文件,-z 是测试字符串是否为空,&&与,都满足执行删除 logs 目录