9

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

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

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

find: __temp__foo: unknown option

如果我运行命令并且只有 1 个__temp__目录 ( __temp__foo),它将被删除并得到输出:

find: ./__temp__foo: No such file or directory

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

4

1 回答 1

26

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

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

解释

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

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

于 2012-09-19T03:14:20.117 回答