如何删除目录中的所有内容?


25

如何删除目录中的所有内容,包括隐藏的文件和目录?

现在,我使用以下内容:

rm -rf *
rm -rf .*

5
您可以将它们合并为rm -rf .* *
用户未知,

2
您可以上一个目录然后运行rm -rf yourdirectory/*
shreyansp '16

1
很抱歉错过了隐藏目录部分。以前的用户解决方案涵盖了这一点
shreyansp

您发布的第二个选项非常危险。它将匹配..目录,该目录将删除上面目录中的所有内容。
理查德·彼得森

Answers:


17

简单明了:

find -delete 

包括目录和隐藏文件。至少gnu-find知道-delete,您find可能会有所不同。


1
为避免删除目录,请使用find /path -delete -mindepth 1
orodbhen

@orodbhen:find -delete不会删除您在其中启动命令的目录(如rm问题)。
用户未知

11

最好的答案是:不要那样做。递归地删除目录本身,然后将其重新创建为空目录。对于其他人来说,它更可靠,更容易理解您要执行的操作。重新创建目录时,它可能具有不同的所有者,组和权限。如果这些很重要,请小心。另外,如果任何正在运行的程序在目录上都有打开的文件句柄(描述符),则您将不希望将其删除。如果没有这些特殊情况,则删除整个目录会更简单。


7
那么,这更容易。“小心”不是答案。我不明白为什么有人删除目录并再次重建它。
用户未知,

我添加了短语“作为一个空目录”,这也许更清楚了。
克里斯·奎纳

2
不,它不能解释为什么删除目录然后重新创建目录。顺带一提,创建的日期/时间也属于该考虑的事物。
不知名的使用者

2
如果该目录是某个进程的当前工作目录,则可能会遇到问题。另外,如果删除目录,则会删除有关其权限和所有权的信息。


5

假设bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

启用dotglob后,它可以*扩展到所有文件和目录,甚至包括以.- 开头但扩展到.和的文件和目录..,因此可以安全地与使用rm


2

如果您在目录中:

cd .. && rm -rf dir && mkdir dir && cd dir

除此以外:

rm -rf /path/to/dir && mkdir /path/to/dir



1

如何使用find。我认为,当您必须遍历子目录时,这通常是一个不错的选择。

find . -type f -exec rm {} \;

1
有一个-delete开关,因此您可以删除目录。(至少在gnu-find中)。
用户未知,

这不会删除子目录
sasha

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.