如何在Linux中使用`find`命令删除非空目录?

时间:2012-09-19 03:09:57

标签: linux bash find

我的临时目录中充满了垃圾,所有垃圾都以__temp__开头(例如__temp__user_uploads),我想用清理功能删除它。我的功能尝试是运行:

find . -name __temp__* -exec rm -rf '{}' \;

如果我运行该命令并且有多个__temp__目录(__temp__foo__temp__bar),我会得到输出:

find: __temp__foo: unknown option

如果我运行该命令并且只有一个__temp__目录(__temp__foo),则会将其删除并获得输出:

find: ./__temp__foo: No such file or directory

为什么命令不起作用,为什么它不一致,我该如何解决呢?

1 个答案:

答案 0 :(得分:25)

使用深度优先搜索并引用(或转义)shell元字符*

find . -depth -name '__temp__*' -exec rm -rf '{}' \;

<强>解释

如果没有-depth标志,您的find命令将删除匹配的文件名,然后尝试进入(现在未链接的)目录。这是单个__temp__目录中“无此文件或目录”的来源。

在不引用或转义*的情况下,shell将扩展该模式,匹配当前工作目录中的多个__temp__whatever文件名。这种扩展会混淆find,它在其参数列表中期望选项而不是文件名。