菜鸟科技网

rmdir删除命令与rm有何区别?

rmdir 是一个在 Linux、Unix、macOS 以及 Windows 的命令行(如 PowerShell 和 CMD)中都存在的命令,其核心功能是 删除空目录

rmdir删除命令与rm有何区别?-图1
(图片来源网络,侵删)

核心功能:删除空目录

rmdir 的名字就揭示了它的本质:rm (remove) + dir (directory),即“移除目录”。

最重要的一点:rmdir 只能删除完全为空的目录。 如果目录中包含任何文件或子目录,rmdir 命令将会失败,并提示 Directory not empty (目录非空)。


基本语法

rmdir [选项]... 目录名...
  • [选项]...:可选的命令行选项,用于控制命令的行为。
  • 目录名...:一个或多个你想要删除的空目录的路径,可以一次删除多个。

常用选项

选项 长选项 描述
-p --parents 递归删除,不仅删除指定的目录,还会删除其所有上级空目录。
-v --verbose 显示详细信息,在执行删除操作时,打印出被删除的目录名称。
--help 显示帮助信息并退出。
--version 显示版本信息并退出。

使用示例

假设我们有如下的目录结构:

.
└── my_project/
    ├── src/
    │   └── main.c
    ├── docs/
    │   └── README.md
    └── logs/

示例 1:删除一个空目录

logs 目录是空的,我们可以用 rmdir 删除它。

rmdir删除命令与rm有何区别?-图2
(图片来源网络,侵删)
# 尝试删除 logs 目录
$ rmdir logs
# 检查目录结构,发现 logs 目录已被成功删除
$ tree
.
└── my_project/
    ├── src/
    │   └── main.c
    └── docs/
        └── README.md

示例 2:尝试删除一个非空目录(失败)

如果我们尝试删除 src 目录,它会失败,因为 src 目录里有 main.c 文件。

$ rmdir src
rmdir: failed to remove 'src': Directory not empty
# 提示 "目录非空",删除失败

示例 3:使用 -p 选项递归删除空目录

我们手动创建一个嵌套的空目录结构来演示 -p 选项。

# 创建一个嵌套的空目录结构
$ mkdir -p parent/child/grandchild
# 使用 -p 选项一次性删除整个链路
$ rmdir -p parent/child/grandchild
# 检查,发现从 grandchild 到 parent 的所有空目录都被删除了
$ ls -l
# parent 目录已经不存在了

rmdir -p parent/child/grandchild 会尝试按顺序删除 grandchild -> child -> parent,只要中间某一级不是空的,整个操作就会停止。

示例 4:使用 -v 选项显示详细信息

# 创建一个空目录 temp_dir
$ mkdir temp_dir
# 使用 -v 选项删除,会显示删除的动作
$ rmdir -v temp_dir
rmdir: removing directory, 'temp_dir'

示例 5:一次删除多个空目录

# 创建几个空目录
$ mkdir dir1 dir2 dir3
# 一次性删除它们
$ rmdir dir1 dir2 dir3
# 检查,发现这些目录都消失了
$ ls dir1
ls: cannot access 'dir1': No such file or directory

rmdir vs rm -r:一个重要的区别

rmdir 的功能非常有限,因为它只能删除空目录,在实际工作中,我们更常用 rm 命令来删除目录。

rmdir删除命令与rm有何区别?-图3
(图片来源网络,侵删)
命令 功能 危险性
rmdir dir 仅当 dir 为空时,才能删除 dir ,无法误删非空目录。
rm -r dir 递归删除 dir 目录及其内部所有文件和子目录。 极高,如果误用,可能会造成不可逆的数据丢失。

rm -r 的一个重要提示: 在 Linux 和 macOS 中,rm 命令默认没有“回收站”,一旦删除,数据就很难恢复。

在使用 rm -r 之前,强烈建议先使用 lstree 命令确认一下你要删除的目录内容是否正确。

# 安全的删除流程
# 1. 先查看要删除的目录内容
$ ls -R my_project/
# ... 确认内容无误 ...
# 2. 执行删除
$ rm -r my_project/

特性 rmdir rm -r
主要用途 删除空目录 删除文件或任何目录(空或非空)
安全性 ,无法误删非空目录内容。 ,非常危险,容易误删大量数据。
使用场景 脚本中确保只删除已确认的空目录;手动清理一些已确认无用的空文件夹。 删除整个项目、临时文件、日志等绝大多数目录删除场景。
核心思想 安全但功能受限 功能强大但需要非常小心
  • 当你100%确定一个目录是空的,并且只想删除它时,可以使用 rmdir,它更安全。
  • 在绝大多数情况下,你都需要删除可能包含文件的目录,这时你应该使用 rm -r(或更安全的 rm -rf,但 -f 选项要慎用),请务必在使用 rm -r 之前,通过 ls 等命令进行确认。
分享:
扫描分享到社交APP
上一篇
下一篇