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

如何用Unix find命令仅遍历指定分支下的dir3目录

优化find命令仅扫描指定目录的方案

原命令效率低的核心原因是:find会遍历/top-level下所有子目录,包括dir1、dir2等无关目录,每个文件都要匹配-path规则,完全没有提前跳过不必要的目录层级。

方案一:直接让Shell展开目标目录(推荐,效率最高)

利用Shell的路径通配符,直接生成所有目标dir3目录的路径,让find只在这些目录内搜索:

find /top-level/[0-9]*/dir3 -type f -name '*.log' -mtime +1 -print
  • 原理:Shell会先将/top-level/[0-9]*/dir3展开为所有符合条件的目录(比如/top-level/1/dir3、/top-level/2/dir3...),find只需要在这些目录下递归查找文件,完全不会进入dir1、dir2等无关目录,性能最优。
  • 注意:如果编号目录数量极多(超过Shell参数列表上限),可能会触发argument list too long错误,此时用方案二。

方案二:用-prune跳过无关目录

通过-prune参数提前排除不需要遍历的目录,避免find进入无关路径:

find /top-level -type d \( ! -path '/top-level/[0-9]*' -o -path '/top-level/[0-9]*' ! -path '/top-level/[0-9]*/dir3' \) -prune -o -type f -path '/top-level/[0-9]*/dir3/*.log' -mtime +1 -print
  • 逻辑拆解:
    1. 匹配需要跳过的目录:
      • ! -path '/top-level/[0-9]*':匹配/top-level下非编号开头的目录(比如/top-level/xx)
      • -path '/top-level/[0-9]*' ! -path '/top-level/[0-9]*/dir3':匹配编号目录下非dir3的子目录(比如/top-level/1/dir1、/top-level/2/dir2)
    2. 对上述目录执行-prune,即跳过遍历其内部内容
    3. -o(逻辑或)之后的部分:匹配编号目录下dir3中的.log文件,满足修改时间条件则打印

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:07:24