我有充满垃圾的临时目录,都以__temp__
(例如__temp__user_uploads
)开头,我想用清理功能删除它.我的功能尝试是运行:
find . -name __temp__* -exec rm -rf '{}' \;
Run Code Online (Sandbox Code Playgroud)
如果我运行命令并且有多个__temp__
目录(__temp__foo
和__temp__bar
),我得到输出:
find: __temp__foo: unknown option
Run Code Online (Sandbox Code Playgroud)
如果我运行命令并且只有一个__temp__
目录(__temp__foo
),它将被删除,我得到输出:
find: ./__temp__foo: No such file or directory
Run Code Online (Sandbox Code Playgroud)
为什么命令不起作用,为什么它不一致,我该如何解决呢?
pil*_*row 25
使用深度优先搜索并引用(或转义)shell元字符*
:
find . -depth -name '__temp__*' -exec rm -rf '{}' \;
Run Code Online (Sandbox Code Playgroud)
说明
如果没有该-depth
标志,您的find
命令将删除匹配的文件名,然后尝试进入(现在未链接的)目录.这是单个__temp__
目录案例中"No such file or directory"的起源.
在不引用或转义的情况下*
,shell将扩展该模式,匹配__temp__whatever
当前工作目录中的多个文件名.这种扩展会让人find
感到困惑,因为它在参数列表中期望选项而不是文件名.