假设给出了以下项目结构:
/
|
|- /bin
|- /src
|
|- /bin
|- abc
...
|
|- /bin
我想删除bin
子目录的内容,但不删除它们。如何通过Bash命令行实现tis?
修改
我尝试了find . -regex bin/* -type d -exec rm -rf {} \;
,但无济于事。
答案 0 :(得分:1)
我建议使用GNU find:
find . -regex ".*/bin/.*" -type f -exec echo rm {} \;
如果一切正常,请删除echo
。
答案 1 :(得分:1)
如果要删除文件,将-r
传递给rm
是不必要的(确实很危险)。
此外,find
"知道"如何删除,而无需首先调用rm
。
find . -type f -wholename "*/bin/*" -delete
答案 2 :(得分:0)
调试命令:单独尝试find
的每个参数,看它是否产生预期的输出。
我们很快就看到了
find . -regex bin/*
由于正则表达式存在问题,无法正常工作。如果我们检查man是否有查找,我们会看到正则表达式必须与完整路径匹配:
-regex模式 文件名与正则表达式模式匹配。这是一场比赛 在整个路径上,而不是搜索。例如,匹配文件 名为
./fubar3', you can use the regular expression
。* bar。' 或.*b.*3', but not
f。* r3'。
这应该做的工作:
find . -regex '".*/bin/.*"' -type d -delete
或使用您的命令:
find . -regex '".*/bin/.*"' -type d -prune -exec rm -rf {} \;
请记住引用您的表达式以避免意外的shell扩展。