The situation is, I have an MP3 player mpg321 that accepts a list of files as argument. I keep my music in a directory named music, in which there are a few more directories. I just want to play all of them, so I run the program withmpg321 $(find /music -iname *\.mp3). The problem is, some file names have whitespace in them, and the program breaks those names into smaller parts and complains about missing files. Wrapping the result of find in quotesmpg321 $(find /music -iname *\.mp3)does not help because all will become one big file name, which is obviously not found.How can I do this then? If that matters, I am using bash, but will be switching to zsh soon.
how to pass the result of `find` as a list of files?
command line;shell
Try using find's -print0 or -printf option in combination with xargs like this:find /music -iname *\.mp3 -print0 | xargs -0 mpg321How this works is explained by find's manual page:-print0True; print the full file name on the standard output, followed by a null character (instead of the newline character that -print uses).   This  allows file  names that contain newlines or other types of white space to be correctly interpreted by programs that process the find output.  This option corresponds to the -0 option of xargs.