find - exec 用美元删除目录

Wol*_*ahl 1 find exec

具有美元名称的 Maven 本地存储库目录中 - 未解析的属性?我已经概述了我是如何得到几十个文件名中带有美元符号的目录的。

我试图用以下命令摆脱这些:

find . -type d -name "*\$*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

它为每个目录提供了一条错误消息。但是目录和它们的内容从来没有少过。

所以我重试了/tmp

mkdir "\$adir"
find . -type d -name "*\$*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

并再次出错

find: ./$adir: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何在没有这样警告的情况下删除文件?

Ste*_*itt 6

发生这种情况是因为在每个匹配的目录上find执行rm -rf,然后尝试进入该目录 - 但它已经消失了。

为了避免这种情况,并且不会收到相应的警告,您应该告诉find修剪目录,这样它就不会尝试进一步处理它们:

find . -type d -name "*\$*" -exec rm -rf {} \; -prune
Run Code Online (Sandbox Code Playgroud)

由于rm可以处理多个目录,您可以告诉一次find删除多个目录:

find . -type d -name "*\$*" -exec rm -rf {} + -prune
Run Code Online (Sandbox Code Playgroud)

  • ...或使用深度优先遍历和`-depth`。 (2认同)