Looping a través de encontrar resultados en Bash donde el nombre de archivo contiene espacios en blanco

Intento buscar archivos que puedan contener espacios en blanco. Trato de usar -print0 y establecer IFS aquí es mi script

 IFS=$'\0';find people -name '*.svg' -print0 | while read file; do grep ' /dev/null && echo $file | tee -a embeded_images.txt; done 

Intento corregir todo el archivo svg que contiene imágenes embebidas, funciona sin -print0 pero falla uno solo, así que detengo el script. Aquí hay un ejemplo más simple que tampoco funciona

 IFS=$'\0';find . -print0 | while read file; do echo $file; done 

no muestra nada

Use el read -d '' -r file y configure IFS solo para el contexto de read :

 find people -name '*.svg' -print0 | while IFS= read -d '' -r file; do grep ' /dev/null && echo "$file" | tee -a embeded_images.txt; done 

Y cita tus variables.

Aunque la respuesta de Dennis Williamson es absolutamente correcta, crea una subcapa , que le impedirá establecer cualquier variable dentro del ciclo. Puede considerar el uso de sustitución de procesos, así:

 while IFS= read -d '' -r file; do grep ' /dev/null && echo "$file" | tee -a embeded_images.txt done < <(find people -name '*.svg' -print0) 

El primero < indica que está leyendo desde un archivo, y el < (find...) se reemplaza por un nombre de archivo (generalmente un identificador a un conducto) que devuelve el resultado de find directamente. Porque while lee desde un archivo en lugar de un conducto, su ciclo puede establecer variables a las que se puede acceder desde fuera del scope.