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

如何在Git中列出所有包含已修改文件的文件夹名称?

如何用Git列出包含已修改文件的文件夹

确实,Git没有直接的命令能直接输出包含修改文件的文件夹名称,但我们可以结合git diff和一些文本处理工具来实现这个需求,下面给你几个实用的方案:

方案1:获取一级子文件夹(适用于简单目录结构)

如果你的修改文件都在一级子文件夹下(比如你例子里的B/b1.txt、C/c1.txt),可以用这条命令:

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

命令拆解:

  • git diff --name-only:列出所有已修改文件的完整路径
  • awk -F '/' '{print $1}':以/为分隔符,提取路径的第一个部分(也就是直接包含文件的一级文件夹)
  • sort -u:对结果去重,避免同一个文件夹因多个修改文件重复出现

运行后就会输出你期望的B和C。

方案2:获取直接包含文件的父文件夹(支持嵌套目录)

如果你的文件在更深的嵌套目录里(比如test/B/sub/b1.txt),想要获取直接包含文件的sub文件夹,用这条命令:

git diff --name-only | awk -F '/' '{OFS="/"; $NF=""; print $0}' | sed 's/\/$//' | sort -u

命令拆解:

  • awk -F '/' '{OFS="/"; $NF=""; print $0}':移除路径的最后一个部分(也就是文件名),保留前面的目录结构
  • sed 's/\/$//':去掉目录末尾多余的斜杠,让输出更整洁
  • sort -u:同样做去重处理

方案3:结合git diff --name-status使用

如果你习惯用git diff --name-status查看文件状态,只需要先提取出文件路径部分再处理:

git diff --name-status | awk '{print $2}' | awk -F '/' '{OFS="/"; $NF=""; print $0}' | sed 's/\/$//' | sort -u

这里awk '{print $2}'是提取--name-status输出中的文件路径列(第一列是文件状态标识)。

小提示

这些命令基于Unix-like环境(Linux、macOS)的文本工具,如果你在Windows系统上操作,建议使用Git Bash或者WSL来执行,避免兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:21:02