我知道这会删除子目录中及其下面的所有内容:
rm -rf <subdir-name>
但是如何删除当前目录中的所有内容以及它下面的每个子目录以及所有这些子目录的内容?
答案 0 :(得分:164)
练习安全计算。只需在层次结构中向上一级,不要使用通配符表达式:
cd ..; rm -rf -- <dir-to-remove>
两个破折号--
告诉rm
<dir-to-remove>
不是命令行选项,即使它以破折号开头。
答案 1 :(得分:43)
将删除当前文件/目录下的所有文件/目录。
find -mindepth 1 -delete
如果你想对你的名字所在的另一个目录做同样的事情,你可以命名为
find <name-of-directory> -mindepth 1 -delete
如果您不仅要删除它的子目录和文件,还要删除目录本身,请省略-mindepth 1
。在没有-delete
的情况下执行此操作以获取将要删除的内容的列表。
答案 2 :(得分:40)
我一直在做的是输入
rm -rf *
和然后点击ESC - * ,bash会将*扩展为当前工作目录中明确的文件和目录列表。
好处是:
事实上,我非常喜欢这个,所以我把它作为TAB的默认行为,在.bashrc中使用了这一行:
bind TAB:insert-completions
答案 3 :(得分:21)
使用
rm -rf *
更新:.
代表当前目录,但我们无法使用它。该命令似乎对.
和..
进行了明确检查。请改用通配符globbing。但这可能有风险。
使用更安全的IMO版本:
rm -ri *
(这会在删除每个文件/目录之前提示您进行确认。)
答案 4 :(得分:6)
rm –rf .
将直接删除当前所有内容(包括所有子目录及其内容)是正确的。 单点(.
)表示当前目录。请注意不要rm -rf ..
,因为双点(..
)表示上一个目录。
这就是说,如果你像我一样并且同时打开多个终端窗口,你最好安全并使用rm -ir .
让我们看一下命令参数来理解原因。
首先,如果您查看rm
command man page(大多数Unix下的man rm
),您会注意到–r
表示“以递归方式删除目录内容”。因此,单独执行rm -r .
将删除当前目录中的所有内容,并删除所有内容。
在rm –rf .
中,添加的-f表示“忽略不存在的文件,从不提示”。该命令删除当前目录中的所有文件和目录,并且从不提示您确认是否确实要这样做。如果您在特权用户下运行该命令,则-f
特别危险,因为您可以删除任何目录的内容,而无法确保它真正符合您的要求。
另一方面,在 rm -ri .
中,替换-i
的{{1}}表示“在删除之前提示”。这意味着在rm愉快地删除所有文件之前,你将有机会说“oups!这不是我想要的”。
在我早期的系统管理员时代,我在系统上使用完全权限(root)进行了-f
。结果是两天后从备份恢复系统。这就是我现在雇用rm -rf /
的原因。
答案 5 :(得分:5)
rm -rf *
不要这样做!这很危险!请确认你是在正确的目录!
答案 6 :(得分:5)
怎么样:
rm -rf "$(pwd -P)"/*
答案 7 :(得分:4)
使确定您在正确的目录中
rm -rf *
答案 8 :(得分:2)
这个最简单的安全&amp;一般解决方案可能是:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
答案 9 :(得分: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目录中的所有内容。通过这种方式,您仍然可以指定删除其内容的文件夹,这比仅保留“删除所有内容”更安全,同时保留原始文件夹(有时您希望这样,因为您不允许或只是不想要修改文件夹的现有权限)