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

使用find与-exec执行bash命令时遇报错,求解决方案

问题说明

目录结构

log
├── table_a
│   ├── log1
│   │   ├── 2022-01-01
│   │   │   └── hi.py
│   │   └── 2022-01-02
│   ├── dummy_a
│   │   ├── 2021-10-10
│   │   │   └── hello.txt
│   │   ├── 2022-01-01
│   │   └── 2022-02-02
│   └── dummy_b
│       ├── 2020-11-11
│       │   └── hey.docx
│       └── 2021-03-28
├── table_b
│   ├── log1
│   │   └── 2022-01-11
│   ├── log2
│   └── logger
└── table_c
    └── dummy3

需求

删除所有以dummy_和log开头的目录下、修改时间超过一年的日期命名子目录。测试阶段用-exec echo {} ;替代删除操作,预期输出:

log/table_a/log1/2022-01-01
log/table_a/log1/2022-01-02
log/table_a/dummy_a/2021-10-10
log/table_a/dummy_a/2022-01-01
log/table_a/dummy_a/2022-02-02
log/table_a/dummy_b/2020-11-11
log/table_a/dummy_b/2021-03-28
log/table_b/log1/2022-01-11

错误尝试及问题分析

命令1

find log/*/ \( -name log* -o -name dummy_* \) /* -type d -mtime +365 -exec echo {} \;

报错:

find: /Applications: unknown primary or operator

问题:多余的/*会被Shell解析为根目录下的所有文件/目录,导致find命令参数混乱,无法识别有效操作。

命令2、3

find log/*/ \( -name log* -o -name dummy_* \) -type d -exec find {} -type d -mtime +365 -exec echo {} \;
find log/*/ \( -name log* -o -name dummy_* \) -type d -exec find {} -type d -mtime +365 -exec echo {} \;\;

报错:

find: -exec: no terminating ";" or "+"

问题:嵌套的-exec需要正确转义分号,外层的;未转义会被Shell提前解析,导致find认为命令未完成。


解决方案

方案1:嵌套find(修正转义问题)

find log/*/ \( -name 'log*' -o -name 'dummy_*' \) -type d -exec find {} -type d -mtime +365 -exec echo {} \; \;
  • 外层find定位所有符合命名规则的父目录
  • 内层find筛选父目录下修改时间超一年的子目录
  • 所有;必须用反斜杠转义,通配符加单引号避免Shell提前展开

方案2:单find命令实现(更简洁)

find log -type d \( -path '*/log*/*' -o -path '*/dummy_*/*' \) -mtime +365 -exec echo {} \;
  • 直接从log根目录开始查找
  • -path匹配所有位于log*或dummy_*目录下的子目录
  • 确认输出符合预期后,将echo替换为rm -rf即可执行删除操作

进阶:仅匹配日期格式目录

如果需要严格筛选YYYY-MM-DD格式的子目录,可添加正则匹配:

find log -type d \( -path '*/log*/*' -o -path '*/dummy_*/*' \) -regex '.*/[0-9]{4}-[0-9]{2}-[0-9]{2}' -mtime +365 -exec echo {} \;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:40:31