无法添加用空格分隔的文件到git

har*_*ahv 4 linux git bash scripting commit

我一直在编写一个脚本来使用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 
Run Code Online (Sandbox Code Playgroud)

脚本运行正常,直到它面对一个文件名,里面有空格.例如,我无法添加文件Hello 22.mp4.(请注意,Hello和22之间存在空格).上面的循环将文件作为2个单独的文件,Hello22.mp4并退出并出错.有人知道如何将其添加为单个文件吗?
谢谢

And*_*ewF 10

发生的事情是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
...
Run Code Online (Sandbox Code Playgroud)

正确的解决方法是引用git add $file ,并git ls-filesNULL通过将分开的文件名-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
Run Code Online (Sandbox Code Playgroud)