如何用find命令匹配public_html/core/cache路径并删除其内容?
定位并清理特定路径下的cache文件夹
我明白你想精准找到所有路径为public_html/core/cache的文件夹,之前的命令出问题是因为对find的参数理解有点偏差——咱们一步步来解决:
第一步:精准定位目标文件夹
你之前用find . -name cache会匹配所有名为cache的文件夹,不管它在什么位置,所以会出现无关结果;而find . -name public_html/core/cache报错是因为-name参数只匹配单个文件名,不是完整路径。
要匹配完整路径,咱们得用-path参数:
- 如果你要找当前目录下直接的
public_html/core/cache文件夹(不递归到子目录里的同名路径),用这个命令:find . -path "./public_html/core/cache" -type d -print - 如果你的目录结构里有多个层级的项目(比如
./project1/public_html/core/cache、./project2/public_html/core/cache),需要递归匹配所有这类路径,就用通配符:find . -path "*/public_html/core/cache" -type d -print
这里的-type d是确保只匹配文件夹,避免误匹配同名文件,-print会把找到的路径输出到终端,方便你确认结果是否正确。
第二步:确认无误后删除文件夹内容
当你确认输出的路径都是你要找的目标后,就可以修改命令来删除这些文件夹里的所有内容了。注意:下面的命令会删除文件夹内的所有文件和子文件夹,但保留cache文件夹本身:
方法1:用-exec直接执行删除(直观易读)
find . -path "*/public_html/core/cache" -type d -exec rm -rf {}/* \;
解释一下:{}代表find找到的每个目标文件夹路径,{}/*就是这个文件夹下的所有内容,rm -rf会强制删除这些内容,\;是-exec的结束标记。
方法2:用xargs更高效(适合大量目标文件夹)
如果要处理的文件夹数量很多,xargs会比-exec更高效:
find . -path "*/public_html/core/cache" -type d -print0 | xargs -0 rm -rf -- {}/*
-print0和-0是为了处理带空格或特殊字符的路径,避免出错。
重要提醒
- 一定要先运行不带删除的定位命令,确认输出的路径完全符合你的需求,再执行删除操作!
- 如果你的
cache文件夹本身也需要删除,把命令里的{}/*改成{}即可,但根据你的描述,应该是要保留文件夹只删内容。
内容的提问来源于stack exchange,提问作者Graeme Leighfield
相关产品推荐
相关产品推荐

