使用 git diff 和 xargs -0,文件名中有空格

使用 git diff 和 xargs -0,文件名中有空格

我试图提取自给定提交以来已更改的“项目”列表。为此,我将项目近似为包含已更改文件的文件夹。

我遇到的问题是让它处理名称中带有空格的文件:

$ 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” 周围的引号使其处理空格。

这里了解更多信息。

相关内容