如何在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
相关产品推荐
相关产品推荐

