如何处理从git diff迭代结果时文件名中的空格--仅限名称 [英] How to cope with spaces in file names when iterating results from git diff --name-only
本文介绍了如何处理从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>
推荐答案
使用-z
使git-diff使用空终止符。例如:
export COPY_TO
git diff -z --name-only | xargs -0 sh -c 'for file; 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' sh
请注意,更合理的解决方案是拒绝名称中带有空格的文件创建者的拉取请求。
这篇关于如何处理从git diff迭代结果时文件名中的空格--仅限名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文