在Linux有几种删除目录的方法。如果你的计算机运行的桌面环境Linux发行版,例如Gnome,KDE,Dolphin,则可以使用文件管理器删除文件和目录。
但是,如果您在没有GUI服务器工作,或者想一次删除多个文件目录,最好的选择是从命令行中删除目录/文件夹。
在本教程,我们将介绍如何在Linux使用rmdir
,rm
和find
命令删除目录文件夹。
当您使用桌面环境的文件管理器删除目录时,删除的目录实际上是移动至回收站并且可以轻松恢复。
从命令行删除文件或目录时要格外小心,因为一旦使用命令删除文件目录,就无法完全恢复目录。
在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 . -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
命令您可以根据不同的模式快速有效删除目录。删除目录是一个简单而轻松的过程,但是您必须小心不要删除重要数据。