Para imprimir los nombres de todos los archivos en y por debajo de $ dir de tamaño 0:
find "$dir" -size 0
Tenga en cuenta que no todas las implementaciones de findproducirán resultados de forma predeterminada, por lo que es posible que deba hacer lo siguiente:
find "$dir" -size 0 -print
Dos comentarios sobre el ciclo final de la pregunta:
En lugar de iterar sobre cada otra palabra en una cadena y ver si los valores alternativos son cero, puede eliminar parcialmente el problema que está teniendo con los espacios en blanco iterando sobre las líneas. p.ej:
printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
test "$size" -eq 0 && echo "$path"; done
Tenga en cuenta que esto fallará en su caso si alguna de las rutas generadas por ls contiene nuevas líneas, y esto refuerza 2 puntos: no analice lsy tenga una política de nombres sensata que no permita espacios en blanco en las rutas.
En segundo lugar, para generar los datos del bucle, no es necesario almacenar la salida en una variable solo para echoél. Si simplemente deja que el bucle escriba su salida en stdout, logra lo mismo, pero evita almacenarlo.
man find.