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

Dav*_*ith 28 shell wildcards rm

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

现在,我使用以下内容:

rm -rf *
rm -rf .*
Run Code Online (Sandbox Code Playgroud)

use*_*own 18

简单直接:

find -delete 
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*lle 11

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

  • 那么如何更容易。“小心”不是答案。我不明白为什么有人删除目录并重新重建它。 (7认同)
  • 不,它没有解释为什么你删除一个目录然后重新创建它。顺便说一下,要考虑的事情也属于创建日期/时间。 (2认同)
  • 如果该目录是某个进程的当前工作目录,您可能会遇到问题。此外,如果删除目录,也会删除有关其权限和所有权的信息。 (2认同)

Gil*_*il' 9

rm -rf -- * .[!.]* ..?*
Run Code Online (Sandbox Code Playgroud)

如果三个模式中的每一个都不匹配,则扩展到自身,但这在这里不是问题,因为我们想要匹配所有内容并rm -f忽略不存在的参数。

请注意,.*将匹配...


evi*_*oup 5

假设 bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*
Run Code Online (Sandbox Code Playgroud)

启用 dotglob 后,*将扩展到所有文件和目录,即使是那些以.-开头但扩展到.and 的文件和目录..,因此可以安全地使用rm.


gla*_*dim -2

尝试rm -rf *?*。这将删除正常文件和隐藏文件。

  • 据我所知,没有任何外壳。 (4认同)
  • 问题更可能是“*?*”与“dot”文件/目录不匹配(除非您在 *bash* 中启用了“dotglob”选项、*zsh* 中的“GLOB_DOTS”选项或等效选项无论您使用什么外壳)。 (4认同)