You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多层目录中删除所有文件,仅保留含.regions子串的文件

问题解决方法

错误原因

你之前执行的命令报错主要由3个问题导致:

  • 仅开启了extglob扩展匹配,未开启globstar选项,**递归匹配语法无法生效
  • extglob的!()反匹配语法作用于当前层级的路径项,不能直接在模式内嵌套**递归路径,你写的!(./**/*.regions*)会被shell识别为要删除字面名称为!(./**/*.regions*)的文件,自然找不到对应路径
  • rm -r是递归删除目录的参数,你的需求是删除不符合规则的文件,逻辑不匹配还容易误删整个子目录

解决方案

方案1:使用find命令(兼容性最高,推荐)

find命令不需要额外开启shell选项,逻辑清晰不容易误操作,操作前建议先预览要删除的文件,确认无误后再执行删除:

  1. 预览待删除的文件,确认输出内容都是你要删除的文件:
find my_dirs/ -type f ! -name "*.regions*" -print
  1. 确认无误后执行删除:
find my_dirs/ -type f ! -name "*.regions*" -delete
  1. 如果你需要同时清理删除文件后剩下的空目录,追加执行以下命令:
find my_dirs/ -type d -empty -delete

方案2:使用shell扩展glob匹配

如果习惯用glob语法匹配,可以开启对应shell选项后执行操作:

  1. 开启所需的shell扩展:
shopt -s extglob globstar
  1. 进入my_dirs目录后先预览待删除文件:
echo **/!(*.regions*)
  1. 确认无误后执行删除:
rm -- **/!(*.regions*)

注:--参数用于避免文件名以-开头时被识别为rm的命令参数,不加-r参数的rm不会删除子目录,符合你保留目录结构的需求。

内容的提问来源于stack exchange,提问作者Valentin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:09:02