git - 迭代 git diff --name-only 的结果时如何处理文件名中的空格

标签 git bash spaces git-bash git-diff

我正在处理的脚本需要通过 git diff 遍历每个文件。但是,我不知道如何处理文件名中的空格。任何有空格的文件都被分成“2 个文件”。我知道它们需要包装在 "" 中,但我不知道如何在它进入 @ 参数之前实现这一点。

当文件名中有空格时,我应该如何遍历来自的文件

git diff --name-only  $1

?

这是一个重现错误的简单测试:

copyfiles()
{
    echo "Copying added files"
    for file in $@; do

        new_file=$(echo ${file##*/})

        directory=$(echo ${file%/*})
        echo "Full Path is is  $file"
        echo "File is  $new_file"
        echo "Directory is  $directory"
        cp $file $COPY_TO
    done    
}

COPY_TO="testDir"
DIFF_FILES=$( git diff --name-only  $1) 
copyfiles $DIFF_FILES 

脚本当前运行如下:

test.sh <git commit id>

最佳答案

git diff -z --name-only |
while read -d $'\0' file
do
    echo ${file}
done

关于git - 迭代 git diff --name-only 的结果时如何处理文件名中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28109520/

相关文章:

代码错误 无法插入字符

ios - 导入 Square SDK 时克隆和复制方法不起作用

javascript - 在 Aptana Studio 中自动插入版本号

c - 在c中使用bash进入文件夹

linux - 在maven项目中选择一个jar文件

makefile:变量值中的尾随空格

git stash 和 edited hunks

git - 由于未找到 git 子模块存储库,Travis 构建失败

linux - 删除bash脚本linux中不同列中相同值的重复

eclipse - 在所有文件中插入空格而不是制表符