在Unix中,如何删除当前目录及其下的所有内容?


Answers:


166

练习安全的计算。只需在层次结构中上一层,而不使用通配符表达式:

cd ..; rm -rf -- <dir-to-remove>

两个破折号--告诉rm<dir-to-remove>不是一个命令行选项,即使它与破折号开始。


8
为什么这样更安全?
日日元

34
因为您专门匹配命名目录,因此不太可能删除您不打算删除的内容。
tvanfosson

5
真正。我可以看到自己很容易做到这一点。
日日元

26
它也不会删除目录本身吗?之后,您必须执行mkdir <dir-to-remove>。但是,随后任何指向该目录的硬链接都将是一个不同的目录。
Johannes Schaub-litb

5
@Yen,如果您使用rm ./它,可能会意外输入rm . /,可能会造成灾难。
irfandar 2012年

44

将删除当前文件/目录下的所有文件/目录。

find -mindepth 1 -delete

如果要对名称相同的另一个目录执行相同的操作,则只需命名为

find <name-of-directory> -mindepth 1 -delete

如果不仅要删除其子目录和文件,还希望删除目录本身,请省略-mindepth 1。不做此操作即可-delete获取将要删除的内容的列表。


我需要删除子目录中的所有文件,但不想删除子目录本身。找到<name-of-direcotry> -mindepth 2-删除效果很好!
蒂姆·迪尔伯恩

你需要-mindepth 1,如果你指定一个目录(find <name-of-directory> -mindepth 1 -delete)。否则Johannes是正确的,它将不会删除当前的工作目录(使用时find -delete)。
Weboide

IMO,这是最好的答案,尤其是在脚本中。
wizonesolutions 2015年

1
我想: find -mindepth 1 -delete但我得到 illegal option -- m,但它的工作伟大的,当我删除了mindepth选项 find . -delete
沙龙

41

我一直做的就是打字

rm -rf *

然后打ESC- *,和bash将扩大*在当前工作目录中的文件和目录的显式列表。

好处是:

  • 我可以在按ENTER键之前查看要删除的文件列表。
  • 命令历史记录将不包含通配符完整的“ rm -rf *”,然后可能会在错误的时间在错误的时间意外地重用该命令。而是,命令历史记录将在其中具有实际的文件名。
  • 一两次回答“等一下...我刚刚删除了哪些文件?”也变得很方便。文件名在终端回滚缓冲区或命令历史记录中可见。

实际上,我非常喜欢这一点,因此在.bashrc中使用以下行将其设置为TAB的默认行为:

bind TAB:insert-completions

--此答案中缺少?总的来说,我必须说这种方法很棒。
Ben Voigt 2014年

更好的方法是使用sudo运行它
Abbas Torabi

22

rm -rf *

更新:.当前目录的代表,但是我们不能使用它。该命令似乎已经明确检查了...。请改用通配符。但这可能有风险。

IMO使用的是更安全的版本:

rm -ri * 

(这会提示您进行确认,然后再删除每个文件/目录。)


13
“可以冒险”简直是古板。

5
在执行此类操作时,我发现了一个快速的ls -r。首先,您可以查看要删除的内容。有助于您快速删除您的整个磁盘...
Rich Bradshaw

2
为什么比rm -rf <subdir-name>更具风险?
日日元

2
@Yen-因为如果在错误的位置进行操作,可能会导致灾难性的结果。如果在同一位置存在相同的子目录,则在错误的位置使用特定名称只会出错。
tvanfosson

1
您可能无法删除居住在孩子中的父母。
2009年

6

正确的做法是rm –rf .直接删除当前的所有内容,包括任何子目录及其内容。的单点.)指当前目录。注意不要做,rm -rf ..因为双点..)表示上一个目录。

话虽如此,如果您像我一样并同时打开多个终端窗口,则最好保持安全,并使用“ rm -ir .让我们看看命令参数”来了解原因。

首先,如果查看rm命令手册页man rm在大多数Unix下),您会注意到它的–r意思是“以递归方式删除目录的内容”。因此,rm -r .单独执行操作会删除当前目录中的所有内容及其下面的所有内容。

rm –rf .添加的-f中表示“忽略不存在的文件,从不提示”。该命令将删除当前目录中的所有文件和目录,并且从不提示您确认确实要这样做。-f如果在特权用户下运行该命令特别危险,因为您可以删除任何目录的内容而没有机会确保它确实是您想要的。

在otherhand,在rm -ri .-i替换的-f意思是“任何拆除前提示”。这意味着您将有机会在rm高兴地删除所有文件之前说“糟糕!这不是我想要的”。

在我早期的sysadmin时代,我rm -rf /以完全特权(root)登录时在系统上进行了操作。结果是两天过去了从备份还原系统。这就是我现在雇用的原因rm -ri


6

怎么样:

rm -rf "$(pwd -P)"/* 

27
jQuery非常强大。
Pawel


4

使确定你是在正确的目录

rm -rf *

2
这不会删除名称以句点开头的文件或子目录。

1
真正。在我的测试中,rm -rf也没有。tvanfosson的“ cd ..; rm -rf <dir-to-remove>”具有最佳的解决方案IMO
digitaljoel

2

这个最简单的安全通用解决方案可能是:

find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

1

我相信这个答案更好:

/unix/12593/how-to-remove-all-the-files-in-a-directory

如果您的顶级目录被调用images,请运行rm -r images/*。这使用shell glob运算符在图像中的每个文件或目录上*运行rm -r

基本上,您会上一层,然后说删除X目录中的所有内容。这样,您仍然可以指定删除哪个文件夹的内容,这比只说“在此处删除所有内容”更安全,同时保留原始文件夹,(有时您会想要这样做是因为不允许或不希望这样做)修改文件夹的现有权限)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.