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: