在Unix中,如何删除当前目录中的所有内容?
我知道这将删除子目录中的所有内容,并在其下面:
rm -rf <subdir-name>
但是,如何删除当前目录中的所有内容以及它下面的所有子目录以及所有这些子目录的内容呢?
实践安全计算。 只需在层次结构中上一层,不要使用通配符expression式:
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之前查看要删除的文件列表。
- 命令历史logging将不包含通配符完整的“rm -rf *”,这可能会在错误的时间被错误地重复使用。 相反,命令历史将有实际的文件名在那里。
- 回答“等一下……我刚刚删除了哪些文件?”,它也变得方便一两次了。 文件名在terminal回滚缓冲区或命令历史logging中可见。
事实上,我非常喜欢这个,所以我在.bashrc中用这行代码使它成为TAB的默认行为:
bind TAB:insert-completions
使用
rm -rf *
更新: 代表当前目录,但是我们不能使用这个。 该命令似乎有明确的检查.
和..
改用通配符。 但是这可能是有风险的。
更安全的版本IMO将使用:
rm -ri *
(这会在删除每个文件/目录之前提示您进行确认。)
rm –rf .
是正确的rm –rf .
将直接删除当前所有的子目录及其内容。 单点 ( .
)表示当前目录。 小心不要做rm -rf ..
因为double dot ( ..
)表示前面的目录。
这rm -ir .
,如果你像我一样,同时打开多个terminal窗口,你最好是安全的使用rm -ir .
让我们看看命令参数来理解为什么。
首先,如果您查看rm
命令手册页 (大多数Unix下的man rm
),您会注意到–r
意思是“recursion删除目录的内容”。 所以,做rm -r .
一个人会删除当前目录中的一切,一切都在下面。
在rm –rf .
添加-f表示“忽略不存在的文件,从不提示”。 该命令将删除当前目录中的所有文件和目录,而不会提示您确认是否真的想要这样做。 如果你在特权用户下运行这个命令, -f
是特别危险的,因为你可以删除任何目录的内容而没有机会确保你真正想要的。
另一方面,在rm -ri .
replace-f
的-i
表示“在任何移除之前提示”。 这意味着在rm愉快地删除所有文件之前,您将有机会说出“这不是我想要的”。
在我早期的系统pipe理员日子里,我使用完全权限(root)login时在系统上执行了rm -rf /
。 结果是两天过去了从备份恢复系统。 这就是为什么我现在使用rm -ri
。
rm -rf *
不要这样做,这是危险的。 确保你在正确的目录。
确保你在正确的目录中
rm -rf *
怎么样:
rm -rf "$(pwd -P)"/*
这个最简单的安全&一般的解决scheme可能是:
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目录里面的所有东西。 这样,你仍然指定哪个文件夹应该删除它的内容,比保留原始文件夹(有时候你想要因为你不被允许或者不想要修改文件夹的现有权限)