在 Unix 中,如何删除当前目录及其下面的所有内容?
-
03-07-2019 - |
题
我知道这会删除子目录及其下面的所有内容:
rm -rf <subdir-name>
但是,如何删除当前目录中的所有内容及其下面的每个子目录以及所有这些子目录的内容呢?
解决方案
练习安全计算。只需在层次结构中向上一级,不要使用通配符表达式:
cd ..; rm -rf -- <dir-to-remove>
两个短划线--
告诉rm
<dir-to-remove>
不是命令行选项,即使它以短划线开头。
其他提示
将删除当前文件/目录下的所有文件/目录。
find -mindepth 1 -delete
如果你想对你的名字所在的另一个目录做同样的事情,你可以命名为
find <name-of-directory> -mindepth 1 -delete
如果您不仅要删除它的子目录和文件,还要删除目录本身,请省略-mindepth 1
。在没有-delete
的情况下执行此操作以获取将要删除的内容的列表。
我总是做的就是打字
rm -rf *
和 然后按 ESC-*, ,bash 会将 * 展开为当前工作目录中文件和目录的显式列表。
好处是:
- 我可以在按 ENTER 之前查看要删除的文件列表。
- 命令历史记录不会包含通配符完好无损的“rm -rf *”,这可能会在错误的时间在错误的位置意外地重复使用。相反,命令历史记录中将包含实际的文件名。
- 回答“等一下......”一两次也变得很方便。我刚刚删除了哪些文件?”。文件名在终端回滚缓冲区或命令历史记录中可见。
事实上,我非常喜欢这个,所以我在 .bashrc 中使用这一行将其设置为 TAB 的默认行为:
bind TAB:insert-completions
使用
rm -rf *
更新:.
代表当前目录,但我们不能使用它。该命令似乎对..
和<=>进行了明确的检查。请改用通配符globbing。但这可能有风险。
使用更安全的IMO版本:
rm -ri *
(这会在删除每个文件/目录之前提示您进行确认。)
rm –rf .
正确删除当前的所有内容(包括所有子目录及其内容)是正确的。 单点(.
)表示当前目录。小心不要rm -rf ..
,因为双点(..
)表示上一个目录。
这就是说,如果你像我一样并且同时打开多个终端窗口,你最好安全并使用rm -ir .
让我们看一下命令参数来理解原因。
首先,如果您查看 rm
命令手册页(man rm
下大多数Unix)你注意到–r
表示<!>“;递归删除目录的内容<!>”;因此,单独执行rm -r .
将删除当前目录中的所有内容,并且删除所有内容。
在-f
中添加-f表示<!>“;忽略不存在的文件,从不提示<!>”;该命令删除当前目录中的所有文件和目录,并且从不提示您确认是否确实要这样做。如果您在特权用户下运行该命令,则rm -ri .
特别危险,因为您可以删除任何目录的内容,而无法确保它真正符合您的要求。
另一方面,在 -i
中rm -rf /
替换rm -ri
意味着<!>提示,然后再删除<!>。这意味着你将有机会说<!> quot; oups!这不是我想要的东西<!> quot;在rm愉快地删除所有文件之前。
在我早期的系统管理员时代,我在使用完全权限(root)登录时对系统进行了<=>。结果是两天后从备份恢复系统。这就是我现在雇用<=>的原因。
怎么样:
rm -rf "$(pwd -P)"/*
rm -rf *
不要这样做!这很危险!请确认你是在正确的目录!
使确定您在正确的目录中
rm -rf *
这个最简单的安全<!>放大器;一般解决方案可能是:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
我相信这个答案更好:
https://unix.stackexchange.com /问题/ 12593 /如何去除的,所有的档案-IN-A-目录
如果您的顶级目录被称为
images
,则运行rm -r images/*
。这使用shell glob运算符*
在图像中的每个文件或目录上运行rm -r
。
基本上你上升一级,然后说删除X目录中的所有内容。这样你仍然可以指定哪个文件夹应该删除它的内容,这比仅保留原文件夹中的“删除所有内容<!>”更安全,(有时你想要这样,因为你不允许或只是不想修改文件夹的现有权限)