Este comportamento não é reproduzível com find no FreeBSD 11.1-RELEASE quando usar /bin/sh como o shell. Eu era capaz de reproduzi-lo sob /bin/csh e /bin/tcsh .
Para corrigir isso em csh e tcsh , cite {} as \{\} ou '{}' ou use o método abaixo.
Para concatenar corretamente o nome do caminho atual com alguma outra string em uma implementação de find que não expanda {} corretamente ao usar
como parte de uma string, pode-se fazer isso com um shell filho.
Exemplo:
find . -type f -name '*.c' -exec sh -c 'printf "(result):%s\n" "$@"' sh {} +
ou, com echo (mas veja " Por que printf é melhor que echo? "),
find . -type f -name '*.c' -exec sh -c '
for name do
echo "(result):$name"
done' sh {} +
ou
find . -type f -name '*.c' -execdir sh -c '
for name do
mv -- "$name" "OLD_${name##*/}"
done' sh {} +
Ou seja, dê ao shell filho ( sh -c here) os nomes de caminho como comando
argumentos de linha e, em seguida, usá-los no shell gerado para concatenar
como normalmente usaria variáveis de shell.
(o ${name##*/} acima é apenas para proteger contra o GNU find que pré-acrescenta ./ aos nomes de caminho ao usar -execdir )
Relacionados: