Linux命令rm和rmdir的用法及区别

要理解这两个命令的区别,你首先要知道它们分别是用来做什么的

  • rmdir 命令:用来移除空文件夹的命令
  • rmdir -p命令:递归删除空目录
  • rm 命令:用来删除文件或目录的
  • rm -r 命令:递归删除目录及其内容的

从字面里面它们都是用来删除文件的,但区别在于 rmdir 删除空文件夹,而 rm 是直接删除。

如果你要删除的文件夹非空的话,使用 rmdir 是会提示 Directory not empty,但 rm 就不会了,直接就给你删除了。

所以有了经典梗:rm -r 删除跑路。

--------------------------------------------------------------------------------------------------------------------

# rm test.txt rm:是否删除 一般文件 "test.txt"? y # rm homework rm: 无法删除目录"homework": 是一个目录 # rm -r homework rm:是否删除 目录 "homework"? y

参数:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。

---------------------------------------------------------------------

Linux rm(英文全拼:remove)命令用于删除一个文件或者目录。

语法

rm [options] name...

参数

  • -i 删除前逐一询问确认。
  • -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  • -r 将目录及以下之档案亦逐一删除。

实例

删除文件可以直接使用rm命令,若删除目录则必须配合选项"-r",例如:

# rm  test.txt 
rm:是否删除一般文件"test.txt"? y
# rm  homework  
rm:无法删除目录"homework":是一个目录# rm  -r  homework  
rm:是否删除目录"homework"? y 

删除当前目录下的所有文件及目录,命令行为:

rm  -r  *

文件一旦通过rm命令删除,则无法恢复,所以必须格外小心地使用该命令。

----------------------------------------------------------------------------------------------------------------------

语法

rmdir [-p] dirName

参数

    • -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。

实例

将工作目录下,名为 AAA 的子目录删除 :

rmdir AAA

在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。

rmdir -p BBB/Test


--------------------------------------------------------------------------------------------------------------------------

rm -r和rmdir的一个明显区别就是rmdir只能删除空目录,如果删除有文件的目录的话rmdir会提示Directory not empty,但rm -r可以删除含有文件的目录和空目录,它们两者都支持批量删除空目录/有文件的目录。

对于普通用户而言,使用rmdir可以避免误伤其他文件,比如说你想要批量删除一些你认为的空目录,但不确定这些目录中有没有有文件的目录,这时候你就可以使用rmdir命令。

假设test目录为空目录,而test2目录中有文件,使用rmdir会删除空目录而保留有文件的目录:

xx@MacBook-Air ~ % ls
test test2
xx@MacBook-Air ~ % sudo rmdir test test2
rmdir: test2: Directory not empty
xx@MacBook-Air ~ % ls
test 2

但如果你用rm命令进行同样的操作,结果就是两个目录(不管是不是空目录)都会被删除。

我认为rmdir遵循GNU的软件工具哲学(software tools philosophy),原文如下:

Instead, they felt that programs should be specialized tools. In short, each program “should do one thing well.” No more and no less. Such programs are simpler to design, write, and get right—they only do one thing.

中文翻译:

相反,他们认为程序应该是专门的工具。 简而言之,每个程序“都应该做好一件事”。 不多也不少。 这样的程序更易于设计、编写和正确使用——它们只做一件事。

对这一段话,我自己的一句话总结就是:「为每件工作准备一个合适的工具,而不是为所有工作准备一个复杂的工具」

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据