A página de manual do GNU encontra estados:
-exec command ; [...] The string `{}' is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is alone, as in some versions of find. Both of these constructions might need to be escaped (with a `\') or quoted to protect them from expansion by the shell.
Isso é do homem para find
(GNU findutils) 4.4.2.
Agora eu testei isso com bash e dash, e ambos não precisam ter o {}
mascaramento. Aqui está um teste simples:
find /etc -name "hosts" -exec md5sum {} \;
Existe uma concha, para a qual eu realmente preciso mascarar o aparelho? Observe que isso não depende se o arquivo encontrado contém um espaço em branco (chamado a partir do bash):
find ~ -maxdepth 1 -type d -name "U*" -exec ls -d {} \;
/home/stefan/Ubuntu One
Isso muda se o arquivo encontrado for passado para um subshell:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d {}' \;
ls: cannot access /home/stefan/Ubuntu: No such file or directory
ls: cannot access One: No such file or directory
que pode ser resolvido por:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "$0"' {} \;
em contraste com:
find ~ -maxdepth 3 -type d -name "U*" -exec bash -c 'ls -d "{}"' \;
/home/stefan/Ubuntu One
mas não é disso que a página de manual está falando, é? Então, qual shell trata {}
de uma maneira diferente?