如何在 Linux 中移除(删除)目录

评论 0 浏览 0 2019-08-07

有几种不同的方法可以删除 Linux 系统中的目录。如果您使用桌面文件管理器,例如 Gnome 的文件或 KDE 的 Dolphin,则可以使用管理器的图形用户界面删除文件和目录。但是,如果您正在使用无头服务器或想要一次删除多个目录,那么最好的选择是从命令行删除目录(文件夹)。

在本文中,我们将解释如何使用rmdirrmfind命令在Linux中删除目录。

在你开始之前

使用桌面文件管理器删除目录时,该目录实际上会移至垃圾箱,并且可以轻松恢复。

从命令行删除文件或目录时要格外小心,因为一旦使用本文中解释的命令删除目录,就无法完全恢复。

在大多数 Linux 文件系统上,删除目录需要对该目录及其内容的写权限。否则,您将收到“Operation not permitted”错误。

包含空格的目录名称必须使用反斜杠 (\) 进行转义。

使用rmdir删除目录

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

要删除带有 rmdir 的目录,请键入命令,后跟要删除的目录的名称。例如,要删除名为 dir1 的目录,您可以键入:

rmdir dir1

如果目录不为空,则会出现以下错误:

输出

rmdir: failed to remove 'dir1': No such file or directory

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

使用rm删除目录

rm 是一个用于删除文件和目录的命令行实用程序。与rmdir不同,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: remove 1 argument recursively? y

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

rm -r *_bak

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

使用find删除目录

find 是一个命令行实用程序,允许您根据给定表达式搜索文件和目录并对每个匹配的文件或目录执行操作。

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

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

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

  • /dir - 在当前工作目录中递归搜索 (.)。
  • -type d - 将搜索限制为目录。
  • -name '*_cache' - 仅搜索以_cache结尾的目录
  • -exec - 执行带有可选参数的外部命令,在本例中为rm -r
  • {} + - 将找到的文件附加到rm命令的末尾。

删除所有空目录

要删除目录树中的所有空目录,您可以运行:

find /dir -type d -empty -delete

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

  • /dir - 在/dir目录中递归搜索。
  • -type d - 将搜索限制为目录。
  • -empty - 将搜索限制为仅空目录。
  • -delete - 删除子树中所有找到的空目录。 -delete只能删除空目录。

使用-delete选项时要格外小心。 find 命令行被计算为表达式,如果您首先添加 -delete 选项,该命令将删除您指定的起点以下的所有内容。

始终首先测试不带 -delete 选项的命令,并使用 -delete 作为最后一个选项。

/bin/rm:参数列表太长

当您使用rm命令删除包含大量文件的目录时,会出现此错误消息。发生这种情况是因为文件数量大于系统对命令行参数大小的限制。

对于这个问题有几种不同的解决方案。例如,您可以 cd 到目录并手动或使用 循环 来一一删除子目录。

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

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

结论

使用rmfind,您可以快速高效地删除基于不同标准的目录。

删除目录是一个简单易行的过程,但您必须小心不要删除重要数据。

如果您有任何问题或反馈,请随时发表评论。

最后更新2023-10-23
0 个评论