我试图提取自给定提交以来已更改的“项目”列表。为此,我将项目近似为包含已更改文件的文件夹。
我遇到的问题是让它处理名称中带有空格的文件:
$ git diff --name-only TREEISH.. | xargs -n 1 dirname
我已经查看了-0
的选项xargs
和-z
的选项diff
,但这给了我:
$ git diff --name-only -z TREEISH.. | xargs -0 dirname
dirname: too many arguments
我错过了什么?
答案1
尝试这个:
git diff --name-only -z TREEISH.. | while IFS= read -r n; do dirname "$n"; done
- IFS 是输入字段分隔符,用于避免修剪前导/尾随空格
- 需要 -r 来避免反斜杠处理。
- “$n” 周围的引号使其处理空格。
看这里了解更多信息。