rmdir删除空目录
常用:无参
进阶:
-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'
-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'
--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:~$
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。可以在脚本里判断。
案例:
删除单级目录
tm@server1:~$ mkdir test
tm@server1:~$ ls
test
tm@server1:~$ rmdir test
tm@server1:~$ ls
tm@server1:~$
删除多级目录
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:~$
删除指定目录
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:~$
批量删除当前目录下的空目录,用
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 目录