我知道这将删除子目录及其下方的所有内容:
rm -rf <subdir-name>
但是如何删除当前目录中的所有内容以及它下面的每个子目录以及所有这些子目录的内容?
我知道这将删除子目录及其下方的所有内容:
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 会将 * 扩展为当前工作目录中的文件和目录的显式列表。
好处是:
事实上,我非常喜欢这一点,以至于我在 .bashrc 中使用这一行将其设为 TAB 的默认行为:
bind TAB:insert-completions
采用
rm -rf *
更新:.
代表当前目录,但我们不能使用它。该命令似乎对.
和进行了明确的检查..
。请改用通配符通配符。但这可能是有风险的。
更安全的 IMO 版本是使用:
rm -ri *
(这会提示您在删除每个文件/目录之前进行确认。)
正确的做法是rm –rf .
直接删除当前目录中的所有内容,包括任何子目录及其内容。单点( .
) 表示当前目录。注意不要这样做,rm -rf ..
因为双点( ..
) 表示上一个目录。
话虽这么说,如果您像我一样并且同时打开了多个终端窗口,则最好安全并使用rm -ir .
让我们看一下命令参数以了解原因。
首先,如果您查看rm
命令手册页(man rm
在大多数 Unix 下),您会注意到这–r
意味着“递归删除目录的内容”。因此,rm -r .
单独执行将删除当前目录中的所有内容及其下面的所有内容。
在rm –rf .
添加的 -f 表示“忽略不存在的文件,从不提示”。该命令会删除当前目录中的所有文件和目录,并且永远不会提示您确认您确实想要这样做。-f
如果您在特权用户下运行命令,则特别危险,因为您可以删除任何目录的内容而没有机会确保这确实是您想要的。
另一方面, in that 替换了rm -ri .
“在任何删除之前提示”的意思。这意味着在 rm 愉快地删除所有文件之前,您将有机会说“哎呀!那不是我想要的”。-i
-f
在我早期rm -rf /
的系统管理员时代,我在以完全权限(root)登录时在系统上进行了操作。结果是两天后从备份中恢复系统。这就是我现在雇用的原因rm -ri
。
怎么样:
rm -rf "$(pwd -P)"/*
rm -rf *
不要这样做!这很危险!确保您在正确的目录中!
确保您在正确的目录中
rm -rf *
这个最简单的安全通用解决方案可能是:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
我相信这个答案更好:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
如果您的顶级目录被调用
images
,则运行rm -r images/*
. 这使用 shell glob 运算符在图像中的每个文件或目录上*
运行。rm -r
基本上你上一层,然后说删除 X 目录中的所有内容。这样,您仍然可以指定应该删除哪个文件夹的内容,这比仅说“删除此处的所有内容”更安全,同时保留原始文件夹(有时您想要这样做,因为您不被允许或只是不想要修改文件夹的现有权限)