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

如何在Bash中筛选带子目錄的路径,排除无子目錄的父路径?

解决方法:筛选最底层的目录路径

核心需求是排除作为父目录的路径,只保留没有子目录(最底层)的目标路径——比如保留src/services/sam-agent/auth,排除src/services/sam-agent、src/services/wam-controller/api这类父路径。

你可以修改命令为:

find src/services/ -type f -name 'BUILD.bazel' | sed -r 's|/[^/]+$||' | sort | uniq | grep -e '*-controller' | awk '{arr[NR]=$0} END {for(i=1;i<=NR;i++) {if(i==NR || arr[i+1] !~ "^"arr[i]"/") print arr[i]}}'

命令各部分作用:

  • find src/services/ -type f -name 'BUILD.bazel':遍历src/services目录下所有名为BUILD.bazel的文件
  • sed -r 's|/[^/]+$||':去掉文件名,提取每个BUILD.bazel所在的目录路径
  • sort | uniq:对路径排序并去重,避免重复目录
  • grep -e '*-controller':保留名称包含*-controller的路径(保留你原有的筛选规则)
  • awk ...:核心逻辑,遍历所有路径,只保留最底层目录——如果下一个路径不是当前路径的子目录,就打印当前路径;最后一行直接打印

如果你的需求只是排除src/services下直接的一级目录(比如src/services/sam-agent),但保留其下所有子目录(包括wam-controller/api这类二级父目录),可以用更简单的版本:

find src/services/ -type f -name 'BUILD.bazel' | sed -r 's|/[^/]+$||' | sort | uniq | grep -e '*-controller' | grep -v '^src/services/[^/]*$'

这里的grep -v '^src/services/[^/]*$'会排除所有src/services/xxx格式的一级目录路径,保留更深层级的路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:05:28