我正在Bash窗口使用git diff命令对标签进行比较,它大致上做的是我想要的。
$ git diff -- numstat TAG2 TAG1
提供以下输出:
4 6 dir1/dir2/dir3/dir4/thisIsMyFile.cs
我该如何获得这个输出:
4 6 thisIsMyFile.cs
我不需要/想要路径(dir1/dir2/dir3/dir4/
),只需要文件名(thisIsMyFile.cs
)。
我正在Bash窗口使用git diff命令对标签进行比较,它大致上做的是我想要的。
$ git diff -- numstat TAG2 TAG1
4 6 dir1/dir2/dir3/dir4/thisIsMyFile.cs
我该如何获得这个输出:
4 6 thisIsMyFile.cs
我不需要/想要路径(dir1/dir2/dir3/dir4/
),只需要文件名(thisIsMyFile.cs
)。
git diff --numstat TAG2 TAG1 | while IFS= read -r line; do
printf '%s\t' "$(cut -f-2 <<<"$line")"
basename "$(cut -f2- <<<"$line")"
done
这个任务稍微有点复杂,因为它旨在保留原始格式并且即使有带制表符或空格的文件也能正确解析。如果你可以保证没有任何文件名中会出现空格等空白字符,或者你想使用比Bash更强大的脚本语言来解析行,则可以简化此任务。
awk
:git diff --numstat | awk -F'[/\t]' '{print $1,$2,$NF}'
awk
命令是做什么的?
-F'[/\t]'
将字段分隔符设置为制表符或/。(git 的输出是以制表符分隔的)。$NF
是行中的最后一个字段 - 文件名。
使用basename -a $(git diff --numstat TAG1 TAG2)
注意:我正在使用bash语法来执行子命令。