如何删除目录中的所有文件?

whi*_*ose 91 linux directory recursive rm

我正在尝试删除目录中的所有文件和子目录。我曾经rm -r删除所有文件,但我想删除所有文件子目录,不包括顶级目录本身。

例如,我有一个顶级目录,如images. 它所包含的文件header.pngfooter.png和一个子目录。

现在我想删除header.png,footer.png和子目录,但不是images.

我怎么能在linux中做到这一点?

小智 69

如果您的顶级目录名为images,则运行rm -r images/*. 本品采用壳水珠操作*运行rm -r上中的每一个文件或目录images

  • 隐藏文件不会被删除。 (36认同)

use*_*own 61

要删除隐藏文件,您必须指定:

rm -r images/* images/.*
Run Code Online (Sandbox Code Playgroud)

对于 globs 包含.and 的shell ..,这将导致类似的错误

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'
Run Code Online (Sandbox Code Playgroud)

但它会删除隐藏文件。

没有错误消息的方法是使用带有 mindepth 的查找/删除。这是 gnu 查找。

find images -mindepth 1 -delete
Run Code Online (Sandbox Code Playgroud)

您的发现可能缺少-mindepthor-delete谓词,在这种情况下,您可以执行以下操作:

find images/. ! -name . -prune -exec rm -rf {} +
Run Code Online (Sandbox Code Playgroud)

  • @DarkHeart `rm .*` 不会删除 `.` 或 `..` 并且 [至少自 1994 年以来对于 GNU utils 以及可能自 70 年代后期以来对于 UNIX 而言都没有](http://unix.stackexchange. com/a/90075/22222)。您极不可能找到一个系统,其中 `rm .*` 在博物馆外向上遍历文件系统。 (5认同)

zee*_*vfu 22

要删除目录中的所有文件和目录(包括隐藏的),您可以尝试以下操作:


ami*_*ngh 14

要递归删除目录中的所有常规文件,此命令(假设是 GNU 或 FreeBSD find)就足够了:

find . -type f -delete
Run Code Online (Sandbox Code Playgroud)

这留下了所有非常规文件,如符号链接(无论它们是否指向常规文件)、目录、fifos、套接字、设备......

也可以看看:

find . ! -type d -delete
Run Code Online (Sandbox Code Playgroud)

删除除目录之外的任何类型的文件


cet*_*eth 6

试试这个版本:

 rm -r test/*
Run Code Online (Sandbox Code Playgroud)