Git Diff -如何在顶层找到已更改的目录

5ssjco0h  于 12个月前  发布在  Git
关注(0)|答案(1)|浏览(127)

我正在使用从git diff命令获得的文件路径列表,并试图从这些路径中提取根级别的文件夹。例如,我有一个这样的列表:

.github/lint-checker/.eslintrc.js
Calendly/code/src/function-factory.ts
Calendly/code/src/functions/common/utils.ts
Calendly/code/src/functions/sync_calendar/main.ts

字符串
我想提取根级别的文件夹,以便输出为:

.github/lint-checker/
Calendly


我试过使用awk和sed,但没有得到想要的结果。有人能提供一个清晰简洁的方法来实现吗?
谢谢你,谢谢你

wfypjpf4

wfypjpf41#

我不确定我是否完全理解了这个问题,但正如所描述的,这个使用bash参数扩展的超级粗糙和丑陋的代码根据示例提供的输入给出了示例输出。
.github是第一个示例中的根级别文件夹,但在这种情况下,您需要第二个文件夹?

filelist="
.github/lint-checker/.eslintrc.js
Calendly/code/src/function-factory.ts
Calendly/code/src/functions/common/utils.ts
Calendly/code/src/functions/sync_calendar/main.ts
"

个字符
输出量:

.github/lint-checker/
Calendly/
Calendly/
Calendly/


说明:
如果字符串中的第一个字符是.,则[[ "${f:0:1}" =~ '.' ]]计算为true,否则为false。
如果第一个字符是.,则echo ${f//${f##*/}}打印f的值,但从字符串中删除${f##*/}之后。${f##*/}的值是字符串中最后一个/之前的所有值(即.github/lint-checker/)。
如果第一个字符不是.,则echo ${f//${f#*/}}打印f的值,但在从字符串中删除${f#*/}之后。${f#*/}的值是第一个/之前的所有值。
如果这不是你要找的,你可以使用dirnamebasename,或其他bash参数扩展技巧来获得你需要的。否则请提供你想要的“根文件夹”和你想要的“二级”根文件夹的条件。
希望这对你有帮助。

相关问题