When looping recursively through folders with files containing spaces the shell script I use is of this form, copied from the internet:
while IFS= read -r -d $'\0' file; do
dosomethingwith "$file" # do something with each file
done < <(find /bar -name *foo* -print0)
I think I understand the IFS bit, but I don't understand what the '< <(...)
' characters mean. Obviously there's some sort of piping going on here.
It's very hard to Google "< <", you see.
<()
is called process substitution in the manual, and is similar to a pipe but passes an argument of the form /dev/fd/63
instead of using stdin.
<
reads the input from a file named on command line.
Together, these two operators function exactly like a pipe, so it could be rewritten as
find /bar -name *foo* -print0 | while read line; do
...
done