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

问题描述 投票:106回答:10

我知道这会删除子目录中及其下面的所有内容:

rm -rf <subdir-name>

但是如何删除当前目录中的所有内容以及它下面的每个子目录以及所有这些子目录的内容?

bash unix directory subdirectory delete-directory
10个回答
165
投票

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

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

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


1
投票

我相信这个答案更好:

https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

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

基本上你上升一级,然后说删除X目录中的所有内容。通过这种方式,您仍然可以指定删除其内容的文件夹,这比仅保留“删除所有内容”更安全,同时保留原始文件夹(有时您希望这样,因为您不允许或只是不想要修改文件夹的现有权限)


43
投票

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

find -mindepth 1 -delete

如果你想对你的名字的另一个目录做同样的事情,你可以命名

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

如果您不仅要删除它的子目录和文件,还要删除目录本身,请省略-mindepth 1。没有-delete就可以获得将要删除的内容列表。


40
投票

我总是做的是打字

rm -rf *

然后按ESC- *,bash会将*扩展为当前工作目录中的文件和目录的显式列表。

好处是:

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

事实上,我非常喜欢这个,所以我把它作为TAB的默认行为,在.bashrc中使用了这一行:

bind TAB:insert-completions

21
投票

使用

rm -rf *

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

一个更安全的版本IMO将使用:

rm -ri * 

(这会在删除每个文件/目录之前提示您进行确认。)


6
投票

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

这就是说,如果你像我一样并且同时打开多个终端窗口,你最好安全并使用rm -ir .让我们看一下命令参数来理解原因。

首先,如果你看一下rm command man page(大多数Unix下的man rm)你会注意到–r的意思是“递归删除目录的内容”。因此,单独执行rm -r .会删除当前目录中的所有内容,并且所有内容都会丢失。

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

另一方面,在rm -ri .中,替换-i-f意味着“在任何移除之前提示”。这意味着在rm愉快地删除所有文件之前,你将有机会说“oups!这不是我想要的”。

在我早期的系统管理员时代,我在一个系统上做了一个rm -rf /,同时以完全权限(root)登录。结果是两天后从备份恢复系统。这就是我现在雇用rm -ri的原因。


5
投票

怎么样:

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

5
投票
rm  -rf * 

不要这样做!这很危险!请确认你是在正确的目录!


4
投票

确保您在正确的目录中

rm -rf *

2
投票

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

find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
© www.soinside.com 2019 - 2024. All rights reserved.