首页 > 解决方案 > 删除具有特定名称的所有文件夹的内容

问题描述

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

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

我正在尝试调整这个问题中提出的解决方案:How to remove folder with a certain name but after execution this command:

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/*

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

标签: linuxcommand-linerm

解决方案


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

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

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

选项-prune是避免下降到之前已删除的目录。


推荐阅读