云网牛站
所在位置:首页 > Linux命令 > 在Linux中使用rmdir、rm和find命令删除目录的方法

在Linux中使用rmdir、rm和find命令删除目录的方法

2019-08-26 16:17:54作者:叶云稿源:云网牛站

本文介绍使用rmdir、rm和find命令在Linux操作系统中删除目录的方法。在Linux系统中有几种不同的方法可以删除目录,如果你使用桌面文件管理器(如Gnome的文件或KDE的Dolphin),则可以使用管理器的图形用户界面删除文件和目录,但是,如果你正在使用无头服务器或想要一次删除多个目录,最好的选择是从命令行删除目录(文件夹),本文为你介绍这一方面的技术。

在Linux中使用rmdir、rm和find命令删除目录的方法

 

前言

使用桌面文件管理器删除目录时,该目录实际上已移至回收站,并且可以轻松恢复,从命令行删除文件或目录时要格外小心,因为一旦使用本文中介绍的Linux命令删除目录,就无法完全恢复。在大多数Linux文件系统上,删除目录需要对目录及其内容具有写权限,否则你将收到“不允许操作(Operation not permitted)”的错误,同时必须使用反斜杠(/)转义其中包含空格的目录名称。

 

使用rmdir命令来删除目录

rmdir是一个用于删除空目录的命令行实用程序,只有当目录为空时才需要删除目录,而不需要检查目录是否为空。

要使用rmdir命令删除目录,请输入命令,后跟要删除的目录的名称,例如,要删除名为dir1的目录,请输入:

$ rmdir dir1

如果目录不为空,你将收到以下错误:

rmdir:无法删除'dir1':没有这样的文件或目录(rmdir: failed to remove 'dir1': No such file or directory)。

在这种情况下,你需要使用rm命令或手动删除目录内容,然后才能删除它。

 

使用rm命令来删除目录

rm是一个用于删除文件和目录的命令行实用程序,与rmdir命令不同,rm命令可以删除空目录和非空目录,参考rm命令_Linux rm命令使用详解:用于删除给定的文件与目录

默认情况下,在没有任何选项的情况下使用rm时不会删除目录,要删除空目录,请使用-d( -  dir)选项并删除非空目录,并且其所有内容都使用-r(--recursive或-R)选项。

例如,要删除名为dir1的目录及其所有内容,请输入:

$ rm -r dir1

如果目录中的目录或文件受到写保护,操作系统将提示你确认删除,要在不提示的情况下删除目录,请使用-f选项:

$ rm -rf dir1

要一次删除多个目录,请使用rm命令,后跟由空格分隔的目录名称,下面的命令将删除每个列出的目录及其内容:

$ rm -r dir1 dir2 dir3

-i选项告诉rm提示你确认删除每个子目录和文件,如果目录包含大量文件,这可能有点烦人,因此你可以考虑使用-I选项,只会在继续删除之前提示你一次:

$ rm -rI dir1

要删除目录类型y并按Enter键。

rm:递归删除1个参数? y(rm: remove 1 argument recursively? y)

你还可以使用常规扩展来匹配和删除多个目录,例如,要删除当前目录中以_bak结尾的所有第一级目录,将使用以下命令:

$ rm -r *_bak

删除目录时使用常规扩展可能存在风险,建议首先使用ls命令列出目录,以便在运行rm命令之前查看将删除的目录。

 

使用find命令来删除目录

find是一个命令行实用程序,允许你根据给定的表达式搜索文件和目录,并对每个匹配的文件或目录执行操作,参考使用Linux查找命令find的语法和示例,使用find能查找文件

最常见的情况是使用find命令根据模式删除目录,例如,要删除当前工作目录中以_cache结尾的所有目录,将运行:

$ find . -type d -name '*_cache' -exec rm -r {} +

让我们分析一下上面的命令:

1]、/dir:递归搜索当前工作目录(.)。

2]、-type d:将搜索限制为目录。

3]、-name'*_cache':仅搜索以_cache结尾的目录

4]、-exec:使用可选参数执行外部命令,在本例中为rm -r。

5]、{} +:将找到的文件追加到rm命令的末尾。

附1:删除所有空目录

要删除目录树中的所有空目录,将使用:

$ find /dir -type d -empty -delete

以下是对所用选项的解释:

1]、/dir:在/dir目录中递归搜索。

2]、-type d:将搜索限制为目录。

3]、-empty:仅将搜索限制为空目录。

4]、-delete:删除子树中所有找到的空目录,-delete只能删除空目录。

请谨慎使用-delete选项,find命令行被计算为表达式,如果先添加-delete选项,该命令将删除指定起始点以下的所有内容,始终使用-delete作为最后一个选项,在删除之前,首先测试命令而不使用-delete选项。

附2:/bin/rm:参数列表太长(/bin/rm: Argument list too long)

使用rm命令删除包含大量文件的目录时,会出现此错误消息,发生这种情况是因为文件数大于命令行参数大小的系统限制。这个问题有几种不同的解决方案,例如,你可以cd到目录并手动或使用循环逐个删除子目录。

最简单的解决方案是首先使用find命令删除目录中的所有文件,然后删除目录:

$ find /dir -type f -delete && rm -r /dir

 

结语

以上就是主流的删除目录方法,适合在大多数Linux操作系统中。建议使用rm并找到你可以快速有效地删除基于不同标准的目录,同时删除目录是一个简单的操作,但是在操作之前必须小心,不要删除了重要数据,建议采取备份的方式。

 

相关主题

使用shopt:在没有cd命令的Linux中进入目录/文件夹内部

Linux命令子频道
精选文章
热门文章