删除具有特定名称的所有文件夹的内容

Delete content of all folders with certain name

如何删除具有特定名称的所有目录的内容?

我有一个目录结构,里面有很多 build 个目录。我想删除它们的内容(所有文件和子目录),但保留目录本身(所以会有空 build 目录)。

我正在尝试适应这个问题中提出的解决方案:How to remove folders with a certain name 但是在执行此命令后:

find . -name "build" -type d -exec rm -r "{}/*" \; 

我收到了回复(针对每个找到的匹配项)

rm: cannot remove './path/to/found/build/*': No such file or directory

当我直接调用时

rm -r ./path/to/found/build/*

里面的所有文件都被删除了(如预期的那样)

要在 -exec rm -r "{}/*" 中扩展 *,您需要 运行 a shell 而不是直接执行 rm,但是使用此选项您必须注意不要引入命令注入漏洞。 (参见 https://unix.stackexchange.com/a/156010/330217

另一种选择是使用 -path 而不是 -name

find . -path '*/build/*' -exec rm -r "{}" \; -prune

选项-prune是为了避免进入之前已经删除的目录。