如何通过终端(bash shell)快速删除文件和目录

427

在终端窗口中:

当我使用rm命令时,它只能删除文件。
当我使用rmdir命令时,它只能删除空文件夹。

如果我有一个嵌套了文件和文件夹的目录,里面还有更多的文件夹和文件,那么有没有一种方法可以删除所有的文件和文件夹,而不需要输入繁琐的命令?

如果有区别的话,我是从终端使用Mac Bash shell,而不是Microsoft DOS或Linux。


1
万一您希望在将来恢复这些文件,请不要使用"rm"删除它们。 请使用"rm-trash":https://github.com/nateshmbhat/rm-trash。 - Natesh bhat
4个回答

968
rm -rf some_dir

-r 表示递归操作 -f 表示强制操作(取消确认消息)

请小心使用!


39
+1并且很高兴你加了“小心!”的提示……如果不小心使用,这绝对是一个可以迅速将美好的一天变糟的"Sawzall"命令。请谨慎使用。 - itsmatt
7
你会后悔的,不要执行类似于“# rm -rf /”这样的命令。 - DarthVader
200
在 Mac 上?请尝试执行以下命令:brew install trash 然后 trash -rf some_dir,这将会把不需要的文件夹移动到垃圾桶中,而不是像《致命魔术》中那样神秘地消失于虚空中。(来源) - zakdances
6
“垃圾”方法很棒! - anopres
1
我收到了“权限被拒绝”的错误信息。 - dev4life
显示剩余6条评论

87
rm -rf *

这会删除当前目录中的所有内容(包括文件和文件夹)。

但要小心!只有在您确信处于正确目录时才执行此命令。


23
rm -rf 是一个非常危险的命令,你应该始终小心谨慎地指定要删除的文件夹。 - eomeroff
11
先运行ls -R *命令,查看rm -rf *要删除哪些文件。 - TheTechGuy
这对我来说很好,谢谢。 - Monica Hübner

19

是的,有的。选项-r告诉rm进行递归处理,并删除以其参数为根的整个文件层次结构;换句话说,如果给定一个目录,则它将删除该目录下的所有内容,然后执行实际上等同于rmdir的操作。

你应该知道的另外两个选项是-i-f-i代表交互式,使rm在删除每个文件之前提示您。-f代表强制,无需询问即可删除所有内容。-i更安全,但-f更快;只有在您绝对确定要删除正确的文件时才使用它。您可以使用-r指定这些选项,也可以不用;这是独立设置。

像往常一样,您可以组合开关:rm -r -i就是rm -rirm -r -f就是rm -rf

还要注意的是,您学到的内容适用于每个Unix操作系统上的bash:OS X、Linux、FreeBSD等。实际上,在每个Unix操作系统上的每个Shell中,rm的语法都是相同的。在内部,OS X实际上是一个BSD Unix系统。


1
尽管上述所有选项在列出的所有Unix版本中都是标准的,但也存在一些差异。例如,OS X(但不是Linux)具有“rm -d”,它可以删除文件或空目录。不过,OS X内部是BSD,这点值得肯定。 - David Gelhar
True——POSIX子集在Unix系统中(几乎)保证能够始终如一地工作,但是超出该范围的任何内容可能会或可能不会。 - Antal Spector-Zabusky

4
我在寻找一种方法,可以删除一个目录中的所有文件,但保留我想要保留的某些目录和文件。我想到了使用find来实现这个目标:
find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

基本上,它使用正则表达式来选择要从结果中排除的目录,然后删除剩余的文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接