myfreax

Linux 删除目录文件夹

如果您在没有GUI服务器工作,或者想一次删除多个文件目录,最好的选择是从命令行中删除目录/文件夹

6 min read
By myfreax
Linux 删除目录文件夹
Linux 删除目录文件夹

在Linux有几种删除目录的方法。如果你的计算机运行的桌面环境Linux发行版,例如Gnome,KDE,Dolphin,则可以使用文件管理器删除文件和目录。

但是,如果您在没有GUI服务器工作,或者想一次删除多个文件目录,最好的选择是从命令行中删除目录/文件夹。

在本教程,我们将介绍如何在Linux使用rmdirrmfind命令删除目录文件夹。

当您使用桌面环境的文件管理器删除目录时,删除的目录实际上是移动至回收站并且可以轻松恢复。

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

在Linux文件系统上删除目录需要对目录及其内容具有写的权限。否则,您将收到Permission denied的错误。

如果目录名称包含空格必须使用反斜杠\对空格进行转义。例如目录的名称是my work。使用反斜杠\对空格进行转义是my\ work

rmdir 命令删除目录

rmdir命令是用于删除空目录工具。只有当目录为空时你才能删除它。这一功能在脚本比较常使用,因为rmdir命令无需你检查目录是否为空。

要删除目录文件夹,请运行rmdir命令后跟要删除的目录名称。例如命令rmdir dir1删除目录dir1

如果目录不为空,你将收到类似这样的错误rmdir: failed to remove 'dir1': No such file or directory

在这种情况下,需要先使用rm命令或手动删除目录内容,才可以删除目录文件夹。

rmdir dir1

rm 命令删除目录

rm命令是用于删除文件和目录。与rmdir命令不同,rm可以删除空目录和非空目录。

在不指定任何选项运行rm命令时不会删除目录。要使用rm命令删除目录文件夹,请使用rm命令的-d/--dir选项。

要递归删除目录以及其内容,请使用rm命令的-r/--recursive-R选项。

如果目录或目录中的文件受写的保护,则将提示您确认是否删除。要在没有任何提示情况下删除目录,请使用rm命令的-f选项。

除了使用-f选项之外,你可能还会经常使用-r选项,因为你已经明确要删除所有文件目录,不管是否处于写保护状态。rm -rf是你常用的命令。

要一次删除多个目录,使用rm命令,后跟多个文件目录的名称并使用用空格分隔的目录名称。例如命令rm -rf dir1 dir2 dir3

rm -rf dir1 file1
rm -rf dir1 dir2 dir3

rm命令-i选项可让您确认每个子目录和文件的删除。如果目录中包含很多文件,这可能会很烦人。

因此您可以考虑使用-I选项,该选项仅会提示您一次,然后再进行删除。rm: remove 1 argument recursively? 输入y并按Enter确认。

rm命令还允许你使用通配符删除多个文件目录。例如命令rm -rf *_bak在当前目录所有删除以_bak结尾文件目录。

在使用通配符时,建议首先使用ls命令列出文件目录,确认要删除的文件目录或者文件夹。

ls -al *_bak
rm -rfi *_bak
rm -rfI *_bak
rm -rf *_bak

Find 命令删除目录

find命令可以根据用户指定的正则表达式或者文件目录的属性搜索文件和目录,并且可以对每个匹配的文件执行用户指定的操作。

最常见的情况是使用find命令根据模式删除文件目录。例如命令find . -type d -name '*_cache' -exec rm -r {} +在当前工作目录删除名称包含_cache的目录。

.当前工作目录进行搜索。-type d指定类型是目录。-name '*_cache'搜索名称必须包含_cache

-exec允许你对搜索结果运行指定的命令,在这教程的命令是rm -r{} +将搜索的结果一次传递给rm命令。

如果find命令搜索结果有50个,则不能将搜索结果作为参数一次传递给命令,因为Linux对最大命令行长度有限制。

因此你应该运行命令find . -type d -name '*_cache' -exec rm -r {} \;。要了解{} \;{} +的不同请参考教程。

详解find exec用法组合 | myfreax
Linux的find命令是根据指定条件查找文件和目录的绝佳工具。您可以通过对找到的文件执行特定操作来将您的find命令提升到一个新的水平
find . -type d -name '*_cache' -exec rm -r {} +
find . -type d -name '*_cache' -exec rm -r {} \;

Find 命令删除所有空目录

find /dir -type d -empty -delete

命令将会删除/dir目录中的所有空目录,这是使用的选项的说明,在/dir目录搜索。-type d指定类型是目录。

-empty仅将搜索限制为空目录。-delete删除子目录的空目录。-delete只能删除空目录。

谨慎使用-delete选项。如果您首先添加-delete选项,将会被Find命令估为表达式,命令将删除您指定的起点所有内容。

你应该将-delete始终用作最后一个选项,在删除文件目录之前,请先测试不带-delete选项的命令。

/bin/rm: Argument list too long

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

有几种不同的解决方案来解决此问题。例如您可以使用cd命令切换目录或使用循环逐个删除子目录。

最简单的解决方案是使用find命令删除文件目录,运行命令find /dir -type d  -exec rm -r {} ;

find /dir -type d  -exec rm -r {} ;

结论

使用rmdir命令,rm命令和find命令您可以根据不同的模式快速有效删除目录。删除目录是一个简单而轻松的过程,但是您必须小心不要删除重要数据。