Search code examples
shellfindquotingcommand-substitution

Using find(1) in command substitution and quote filenames with blanks


I'd like to use find inside a command substitution, where the returned filenames contain whitespace. What option do I need so it correctly quotes the filenames? I tried -print0, but it will not work in the shell itself.

example:

command $(find . -type f) some other params

I also tried with -exec echo "{}" \;, but that was of no help either.


If I use set -x to display shell expansion and the actual command which is executed I get:

$ command `find -type f -printf \"%p\"\ ` some other params
++ find -type f -printf '"%p" '
+ command '"./file_with' 'blanks"' '"./another' 'file"' some other params

Where are the single quotation marks coming from and why are they applied to each "word"?


Solution

  • Put the find result in an array, and run command "${array[@]}" some other params.