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

如何按指定深度的目录分组展示文件列表摘要(含Git场景)

提取指定深度目录并汇总的方法

针对你需要从Git提交或diff的文件列表中按指定目录深度汇总的需求,这里有几个简单高效的shell命令方案:

方法1:使用awk提取指定深度目录

awk可以灵活按分隔符拆分路径,轻松指定要提取的目录层级:

提取一级目录(如foo/、bar/)

git diff --name-only | awk -F '/' '{print $1"/"}' | sort -u
  • -F '/':将路径的分隔符设为斜杠
  • print $1"/":提取第一个目录段并加上斜杠,保持目录格式
  • sort -u:对结果去重,避免重复的目录项

提取二级目录(如foo/sub/、bar/test/)

如果需要更深层级的目录,只需调整print的字段即可:

git diff --name-only | awk -F '/' '{print $1"/"$2"/"}' | sort -u

方法2:使用sed正则匹配目录

sed的正则表达式可以精准匹配指定层级的路径部分:

提取一级目录

git diff --name-only | sed -E 's/([^/]+\/).*/\1/' | sort -u
  • 正则([^/]+\/):匹配第一个斜杠前的所有字符加斜杠
  • \1:保留匹配到的目录部分,替换掉后面的文件名

提取N级目录

要提取N级目录,只需修改正则中的重复次数:

# 提取3级目录,比如`a/b/c/`
git diff --name-only | sed -E 's/(([^/]+\/){3}).*/\1/' | sort -u

把{3}换成你需要的目录层级数字即可。

方法3:结合dirname和sed处理

dirname命令可以直接提取文件的父目录,再通过sed补全斜杠:

git diff --name-only | xargs dirname | sed 's/$/\//' | sort -u
  • xargs dirname:对每个文件路径提取父目录(如foo/1.txt变成foo)
  • sed 's/$/\//':在每个目录末尾加上斜杠,统一格式

通用适配

如果你的文件列表来自其他地方(比如本地的filelist.txt),只需把git diff --name-only换成cat filelist.txt即可,命令逻辑完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:54:54