【发布时间】:2010-10-23 16:11:24
【问题描述】:
我知道这会删除子目录及其下方的所有内容:
rm -rf <subdir-name>
但是如何删除当前目录中的所有内容以及它下面的每个子目录以及所有这些子目录的内容?
【问题讨论】:
标签: bash unix directory subdirectory delete-directory
我知道这会删除子目录及其下方的所有内容:
rm -rf <subdir-name>
但是如何删除当前目录中的所有内容以及它下面的每个子目录以及所有这些子目录的内容?
【问题讨论】:
标签: bash unix directory subdirectory delete-directory
使用
rm -rf *
更新:. 代表当前目录,但我们不能使用它。该命令似乎对. 和.. 进行了明确的检查。请改用通配符通配符。但这可能是有风险的。
使用更安全的 IMO 版本:
rm -ri *
(这会在删除每个文件/目录之前提示您进行确认。)
【讨论】:
确保确定您在正确的目录中
rm -rf *【讨论】:
rm -rf *
别这样!这很危险!确保您在正确的目录中!
【讨论】:
练习安全计算。只需在层次结构中上一层,不要使用通配符表达式:
cd ..; rm -rf -- <dir-to-remove>
两个破折号-- 告诉rm <dir-to-remove> 不是命令行选项,即使它以破折号开头也是如此。
【讨论】:
rm ./,您可能会不小心输入rm . /,这可能是一场灾难。
将删除当前文件下的所有文件/目录。
find -mindepth 1 -delete
如果你想对另一个你有名字的目录做同样的事情,你可以直接命名
find <name-of-directory> -mindepth 1 -delete
如果您不仅要删除它的子目录和文件,还要删除目录本身,请省略-mindepth 1。在没有-delete 的情况下执行此操作以获取将要删除的内容的列表。
【讨论】:
find <name-of-directory> -mindepth 1 -delete),则需要 -mindepth 1。否则 Johannes 是对的,它不会删除当前工作目录(使用 find -delete 时)。
find -mindepth 1 -delete,但我得到了illegal option -- m,但是当我删除了 mindepth 选项时效果很好find . -delete
rm –rf . 会直接删除当前目录中的所有内容,包括所有子目录及其内容,这是正确的。 单点 (.) 表示当前目录。注意不要使用rm -rf ..,因为双点 (..) 表示上一个目录。
话虽如此,如果你和我一样同时打开多个终端窗口,你最好安全使用rm -ir . 让我们看看命令参数来了解原因。
首先,如果您查看rm command man page(大多数Unix 下为man rm),您会注意到–r 的意思是“递归删除目录的内容”。因此,单独执行rm -r . 将删除当前目录中的所有内容及其下面的所有内容。
rm –rf . 中添加的 -f 表示“忽略不存在的文件,从不提示”。该命令会删除当前目录中的所有文件和目录,并且永远不会提示您确认您确实想要这样做。如果您在特权用户下运行该命令,-f 特别危险,因为您可以删除任何目录的内容而没有机会确保这确实是您想要的。
另一方面,在 rm -ri . 中,替换 -f 的 -i 表示“在删除之前提示”。这意味着您将有机会在 rm 愉快地删除您的所有文件之前说“哎呀!那不是我想要的”。
在我早期的系统管理员时代,我在以完全权限(root)登录时在系统上执行了rm -rf /。结果是两天后从备份中恢复系统。这就是我现在雇用rm -ri 的原因。
【讨论】:
这个最简单的安全通用的解决方案可能是:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
【讨论】:
我总是打字
rm -rf *
然后然后按 ESC-*,bash 会将 * 扩展为当前工作目录中文件和目录的显式列表。
好处是:
事实上,我非常喜欢这一点,因此我在 .bashrc 中使用这一行将其设为 TAB 的默认行为:
bind TAB:insert-completions
【讨论】:
--?我必须说,这种方法总体上很棒。
怎么样:
rm -rf "$(pwd -P)"/*
【讨论】:
我相信这个答案更好:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
如果您的顶级目录名为
images,则运行rm -r images/*。这使用 shell glob 运算符*在图像中的每个文件或目录上运行rm -r。
基本上你上一层,然后说删除 X 目录中的所有内容。这样,您仍然可以指定应该删除哪个文件夹的内容,这比仅说“删除此处的所有内容”更安全,同时保留原始文件夹(有时您想要这样做,因为您不被允许或只是不想要修改文件夹的现有权限)
【讨论】: