gpt4 book ai didi

linux - 无法将以空格分隔的文件添加到git

转载 作者:IT王子 更新时间:2023-10-29 00:47:14 27 4
gpt4 key购买 nike

我一直在编写一个脚本来使用 git add 添加未跟踪的文件。我在脚本中使用的循环是

for FILE in $(git ls-files -o --exclude-standard); do  
git add $FILE
git commit -m "Added $FILE"
git push origin master
done

脚本运行良好,直到它遇到一个包含空格的文件名。例如,我无法添加文件 Hello 22.mp4。(注意在 Hello 和 22 之间有一个 SPACE)。上面的循环会将文件作为 2 个单独的文件,Hello22.mp4 并错误退出。有人知道如何将其添加为单个文件吗?
谢谢

最佳答案

发生的事情是 shell 正在将 $(...) 扩展为一堆单词,并且它显然将嵌入空格的文件解释为多个文件。 即使先前建议引用 git add 命令,它也行不通。因此,循环使用错误的参数运行,如 set -x 的输出所示:

ubuntu@up:~/test$ ls -1
a a
ubuntu@up:~/test$ set -x; for FILE in $(git ls-files -o --exclude-standard); do git add "$FILE"; git commit -m "Added $FILE"; done
+ set -x
++ git ls-files -o --exclude-standard
+ for FILE in '$(git ls-files -o --exclude-standard)'
+ git add a
...

正确的解决方案是引用 git add $file git ls-files NULL 通过传递 来分隔文件名-zgit ls-files 并使用带有空分隔符的 while 循环:

git ls-files -o --exclude-standard -z | while read -r -d '' file; do
git add "$file"
git commit -m "Added $file"
git push origin master
done

关于linux - 无法将以空格分隔的文件添加到git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8697448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com