删除具有特定名称的所有文件夹的内容
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
是为了避免进入之前已经删除的目录。
如何删除具有特定名称的所有目录的内容?
我有一个目录结构,里面有很多 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
是为了避免进入之前已经删除的目录。