No se puede agregar un file separado con espacio para git

He estado escribiendo un script para agregar files sin seguimiento usando git add. El ciclo que uso en mi script es

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

La secuencia de commands funciona bien hasta que se enfrenta a un nombre de file que tiene espacio en ella. por ejemplo, no puedo agregar el file Hello 22.mp4 . (Tenga en count que hay un espacio entre Hola y 22). El ciclo anterior tomaría el file como 2 files separados, Hello y 22.mp4 y saldrá con error. ¿Alguien sabe cómo agregarlo como un solo file?
Gracias

Lo que está sucediendo es que el shell está expandiendo $(...) en un montón de palabras, y obviamente está interpretando un file con espacios embeddeds como files múltiples obviamente. Incluso con las sugerencias anteriores de citar el command git add , no funcionaría . Entonces, el ciclo se ejecuta con arguments incorrectos, como se muestra en esta salida con set -x :

 ubuntu@up:~/test$ ls -1 aa 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 ... 

La solución adecuada es citar el git add $file y tener git ls-files NULL separar los nombres de file pasando -z a git ls-files y usar un ciclo while con un delimitador nulo:

 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 

Si está utilizando Bash alternativa a la solución provista por @AndrewF, puede utilizar la variable interna IFS bash para cambiar el delimitador de espacio a nueva línea, algo en estas líneas:

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

Esto es solo para tu información. La respuesta de AndrewF es más informativa que cubre la opción de debugging y el uso de while en lugar de for.
¡Espero que esto ayude!

Intenta poner la $FILE entre comillas:

 git add "$FILE" 

Eso citará el nombre de file, permitiendo espacios en él.

Reemplazar git add $FILE con git add "$FILE" . De esa forma, se interpretará como un elemento único.

Sé que esto es muy tarde, pero esta es una forma de hacerlo utilizando el command xargs linux estándar:

 git ls-files -o --exclude-standard | xargs -L 1 -I{} -d '\n' git add '{}' 

Puedes probarlo simplemente repitiendo el command de la siguiente manera:

 git ls-files -o --exclude-standard | xargs -L 1 -I{} -d '\n' echo "git add '{}'" 

Para agregar como un único file, agregue una barra invertida antes del espacio en el nombre del file:

git agrega pathtofilename / filenamewith \ space.txt